我使用的是弹簧靴1.2.5.RELEASE。
我定义了扩展CrudRepository的接口

public interface SampleEntityService extends CrudRepository<SampleEntity, Long> {...}


因此我的存储库将具有所有方法,例如:保存,删除等。
我想禁用某些方法,例如delete,因此它将抛出NotSupportedException(或其他)。

我的第一个想法是构建装饰器并覆盖所有这些方法并手动引发异常。

有没有更好的解决方案来解决这个问题?

最佳答案

我想您要为Jpa使用。

实现此目的的一种方法是使用自定义JpaRepositoryFactoryBean,该自定义RepositoryProxyPostProcessorJpaRepositoryFactory添加到中以禁用某些方法。

例如:

@Configuration
@EnableJpaRepositories(repositoryFactoryBeanClass = CustomJpaRepositoryFactoryBean.class)
public class MyConfig {

}


然后像

public class CustomJpaRepositoryFactoryBean extends JpaRepositoryFactoryBean {

    @Override
    protected RepositoryFactorySupport createRepositoryFactory(EntityManager entityManager) {
        JpaRepositoryFactory factory = JpaRepositoryFactory(entityManager);
        factory.addRepositoryProxyPostProcessor(new RepositoryProxyPostProcessor() {

            @Override
            public void postProcess(ProxyFactory factory, RepositoryInformation repositoryInformation) {
                factory.addAdvice(new MethodInterceptor() {

                    @Override
                    public Object invoke(MethodInvocation invocation) throws Throwable {
                        if ("unsupportedMethod".equals(invocation.getMethod().getName())) {
                            throw new UnsupportedOperationException();
                        }
                        return invocation.proceed();
                    }
                });
            }
        });
        return factory;
    }
}

关于java - 不支持CrudRepository操作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32349875/

10-10 02:42