최대 절전 모드 인터셉터를 작성 중이므로 최대 절전 모드 세션 개체에 액세스해야합니다. 인터셉터를 사용하여 최대 절전 모드 세션에 직접 접근 할 수 있습니까?인터셉터에서 최대 절전 모드로 전환
내가하려는 것은 최대 절전 모드에 연결된 데이터베이스를 찾는 것입니다. 여러 가지 이유로 스레드 로컬 데이터로 저장하는 것은 비현실적입니다.
최대 절전 모드 인터셉터를 작성 중이므로 최대 절전 모드 세션 개체에 액세스해야합니다. 인터셉터를 사용하여 최대 절전 모드 세션에 직접 접근 할 수 있습니까?인터셉터에서 최대 절전 모드로 전환
내가하려는 것은 최대 절전 모드에 연결된 데이터베이스를 찾는 것입니다. 여러 가지 이유로 스레드 로컬 데이터로 저장하는 것은 비현실적입니다.
o.h.Interceptor
을 통해서도 o.h.EmptyInterceptor
을 통해서도 세션 개체를 가져올 수있는 "공식적인"방법이없는 것 같습니다. 또한, Interceptor
의 자바 독은 말한다 :
각 세션에 대해 지정 될 수 SessionFactory에, 또는 새로운 인스턴스를위한 인터셉터의 단일 인스턴스가있을 수 있습니다. 접근 방식이 사용되는 경우 세션 을 직렬화 할 수 있으면 인터셉터를 직렬화 할 수 있어야합니다. 즉, SessionFactory 범위의 인터셉터가 readResolve()를 구현해야합니다.
세션을 콜백에서 호출 할 수 없으며 콜백 을 사용하면 콜렉션 또는 프록시를 지연 초기화 할 수 없습니다.
이 정보를 얻는 유일한 방법은 리플렉션을 사용하는 것으로 보이며 대답은 here입니다.
Session session = factory.openSession(interceptor);
interceptor.setSession(session);
그리고 당신은 요격 내부 세션이 있습니다
예, 방금 생성 한 후 인터셉터에 세션을 통과 ... 방법이있다! 다음을 기억하십시오 :
거래는 두 세션
try {
Connection connection = mySession.connection();
Session tempSession = HibernateUtil.getSessionFactory().openSession(connection);
// do something
tempSession.flush();
}
finally {
tempSession.close();
}