我使用的是弹簧靴1.2.5.RELEASE。
我定义了扩展CrudRepository的接口
public interface SampleEntityService extends CrudRepository<SampleEntity, Long> {...}
因此我的存储库将具有所有方法,例如:保存,删除等。
我想禁用某些方法,例如delete,因此它将抛出NotSupportedException(或其他)。
我的第一个想法是构建装饰器并覆盖所有这些方法并手动引发异常。
有没有更好的解决方案来解决这个问题?
最佳答案
我想您要为Jpa使用。
实现此目的的一种方法是使用自定义JpaRepositoryFactoryBean
,该自定义RepositoryProxyPostProcessor
将JpaRepositoryFactory
添加到中以禁用某些方法。
例如:
@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/