java - CrudRepository OperationNotSupported

标签 java spring spring-boot spring-data

我使用 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/

相关文章:

java - 对java中的对象数组列表进行排序

spring - Java Spring Eclipse Tomcat - RestTemplate,使用 HTTPS API

java - 在 springboot 中创建名为 'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaConfiguration 的 bean 时出错

java - 在 Tomcat 上部署为 WAR 的 Spring Boot 应用程序中增加类加载计数

java - 如何模拟调用同一类中存在的其他方法的方法

java - 无法为 New->Servlet 选择项目

java - 获取鼠标位置的更快方法

java - AWS Lambda 环境中 javac、jar 等二进制文件位于哪个路径?

java - 使用 Spring Boot 拦截请求和响应以获取/添加相关 ID

java - 如何在 java 中打印完整的 elasticsearch 调试请求