2015-08-26 32 views
0

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

回答

0

我结束了与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"); 
     } 
    } 

} 
0

这里有一个我使用该is_delete支持对象的应用程序 -

entityManager.unwrap(Session.class) 
      .enableFilter("notDeleted") 
      .setParameter("isDeleted", false);