有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Hibernate实体过滤器与Spring数据存储库

我试图在一个Spring Boot项目中使用Hibernate 4's Entity level ^{}'s和Spring数据存储库。我的最终目标是用比Hibernate的@Where注释更灵活的东西实现一个通用的软删除

经过一番努力,我找到了一个可能很幼稚的解决方案,可以使用@Aspect

我设置了一个Spring管理的方面,目的是拦截对共享EntityManager的调用,并启用适当的过滤器

我尝试了几个不同的切入点,看起来execution(public * javax.persistence.EntityManager.find(..))是绑定这个建议的好地方

@Aspect
@Component
public class HibernateFilterInterceptor {

    private final EntityManager entityManager;
    private final PlatformTransactionManager platformTransactionManager;

    @Autowired
    public HibernateFilterInterceptor(EntityManager entityManager, PlatformTransactionManager platformTransactionManager) {
        this.entityManager = entityManager;
        this.platformTransactionManager = platformTransactionManager;
    }

    @Before("execution(public * javax.persistence.EntityManager.find(..))")
    public void beforeFind(){

    }

从Hibernate文档/示例来看,我似乎应该能够使用entityManager.unwrap(Session.class).enableFilter("filter").setParameter("foo", 1);之类的东西启用过滤器

所以为了测试,我在一个实体上定义了一个简单的过滤器

@FilterDef(name = "status", parameters = @ParamDef(name = "status", type = "integer"))
@Filters(
    @Filter(name = "status", condition = ":status = status")
)
public class Entity{

并在我的建议中启用了它

@Before("execution(public * javax.persistence.EntityManager.find(..))")
public void beforeFind(){
 entityManager.unwrap(Session.class).enableFilter("status").setParameter("status", 1);
}

并且没有应用过滤器


共 (0) 个答案