我使用 spring boot 1.2.5.RELEASE。 我定义了一个扩展 CrudRepository 的接口(interface)
public interface SampleEntityService extends CrudRepository<SampleEntity, Long> {...}
所以我的存储库将包含所有方法,例如:保存、删除等。 我想禁用某些方法,例如删除,因此它会抛出 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 OperationNotSupported,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32349875/