java Hibernate实体过滤器与Spring数据存储库
我试图在一个Spring Boot项目中使用Hibernate 4's Entity level ^{@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) 个答案