복붙노트

[SPRING] 필터를 가능하게하기 위해 Spring JPA와 Hibernate를 사용하여 Session에 접근

SPRING

필터를 가능하게하기 위해 Spring JPA와 Hibernate를 사용하여 Session에 접근

Spring JPA + Hibernate 환경에서 나는 Hibernate 엔티티 필터들을 가능하게 할 필요가있다. 그래서 나는 Hibernate Session 객체에 접근해야만한다. 그러나 나는 EntityManagerFactory와 Spring JPA 마법을 사용하고있다. 모든 Session 인터셉터가 있으므로 Spring이 새 Session을 만들 때마다 enableFilters () 메서드를 호출 할 수 있습니까?

해결법

  1. ==============================

    1.나는 AOP 해결책으로 끝냈다 :

    나는 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");
            }
        }
    
    }
    
  2. ==============================

    2.여기 하나는 개체에 대한 is_delete를 지원하는 응용 프로그램 용입니다.

    여기 하나는 개체에 대한 is_delete를 지원하는 응용 프로그램 용입니다.

        entityManager.unwrap(Session.class)
                .enableFilter("notDeleted")
                .setParameter("isDeleted", false);
    
  3. from https://stackoverflow.com/questions/32228031/access-to-session-using-spring-jpa-and-hibernate-in-order-to-enable-filters by cc-by-sa and MIT license