In a Spring JPA + Hibernate environment I need to enable Hibernate entity filters. So I should have access to Hibernate Session object, but I'm using EntityManagerFactory and Spring JPA magics. There is any Session interceptor so I can call the enableFilters() method on it every time Spring create a new Session?
Asked
Active
Viewed 4,472 times
2 Answers
16
I ended up with AOP solution :
@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");
}
}
}

lincetto
- 972
- 2
- 13
- 28
-
4Truly uniform solution. The only shame is that Spring Data design is so bad, that only hacks like this work. As in different parts of Spring, private on finals, and no single point where you can hook with the custom code. – Lukasz Frankowski Jun 16 '18 at 14:12
-
Thank you! I used entityManager , but without transaction it can't work.This answer helps me a lot. – linghu Jun 10 '20 at 09:02
0
here's one i use for apps that support is_delete on objects -
entityManager.unwrap(Session.class)
.enableFilter("notDeleted")
.setParameter("isDeleted", false);

denov
- 11,180
- 2
- 27
- 43