使用 Spring JPA 和 Hibernate 访问会话以启用过滤器
Access to Session using Spring JPA and Hibernate in order to enable filters
在 Spring JPA + Hibernate 环境中,我需要启用 Hibernate 实体过滤器。
所以我应该可以访问 Hibernate Session 对象,但我使用的是 EntityManagerFactory 和 Spring JPA 魔法。
有任何 Session 拦截器,所以我可以在每次 Spring 创建新 Session 时调用 enableFilters() 方法?
我最终得到了 AOP 解决方案:
@Aspect
@Component
public class EnableFilterAspect {
@AfterReturning(
pointcut="bean(entityManagerFactory) && execution(* createEntityManager(..))",
returning="retVal")
public void getSessionAfter(JoinPoint joinPoint, Object retVal) {
if (retVal != null && EntityManager.class.isInstance(retVal)) {
Session session = ((EntityManager) retVal).unwrap(Session.class);
session.enableFilter("myFilter").setParameter("myParameter", "myValue");
}
}
}
这是我用于支持对象 is_delete 的应用程序的一个 -
entityManager.unwrap(Session.class)
.enableFilter("notDeleted")
.setParameter("isDeleted", false);
在 Spring JPA + Hibernate 环境中,我需要启用 Hibernate 实体过滤器。 所以我应该可以访问 Hibernate Session 对象,但我使用的是 EntityManagerFactory 和 Spring JPA 魔法。 有任何 Session 拦截器,所以我可以在每次 Spring 创建新 Session 时调用 enableFilters() 方法?
我最终得到了 AOP 解决方案:
@Aspect
@Component
public class EnableFilterAspect {
@AfterReturning(
pointcut="bean(entityManagerFactory) && execution(* createEntityManager(..))",
returning="retVal")
public void getSessionAfter(JoinPoint joinPoint, Object retVal) {
if (retVal != null && EntityManager.class.isInstance(retVal)) {
Session session = ((EntityManager) retVal).unwrap(Session.class);
session.enableFilter("myFilter").setParameter("myParameter", "myValue");
}
}
}
这是我用于支持对象 is_delete 的应用程序的一个 -
entityManager.unwrap(Session.class)
.enableFilter("notDeleted")
.setParameter("isDeleted", false);