fra*_*cis 9 java spring hibernate jpa spring-data
我试图使用休眠4的实体一级@Filter的同春数据仓库一个春天启动项目内.我的最终目标是使用比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(){
}
Run Code Online (Sandbox Code Playgroud)
从Hibernate docs/examples看来,我应该能够使用类似的东西来启用过滤器 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{
Run Code Online (Sandbox Code Playgroud)
并在我的建议中启用它
@Before("execution(public * javax.persistence.EntityManager.find(..))")
public void beforeFind(){
entityManager.unwrap(Session.class).enableFilter("status").setParameter("status", 1);
}
Run Code Online (Sandbox Code Playgroud)
并且不应用过滤器.
| 归档时间: |
|
| 查看次数: |
1914 次 |
| 最近记录: |