使用Spring JPA和Hibernate访问Session以启用过滤器

lin*_*tto 7 spring hibernate spring-orm

在Spring JPA + Hibernate环境中,我需要启用Hibernate实体过滤器.所以我应该有权访问Hibernate Session对象,但我正在使用EntityManagerFactory和Spring JPA魔法.有任何Session拦截器,所以每次Spring创建一个新Session时我都可以调用enableFilters()方法吗?

lin*_*tto 8

我最终得到了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");
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

  • 真正统一的解决方案。唯一可惜的是,Spring Data设计是如此糟糕,以至于只有这样的黑客才能做到。就像在Spring的不同部分中一样,在final上是私有的,没有一个可以挂接自定义代码的地方。 (2认同)