2012-05-23 4 views
4

최대 절전 모드 인터셉터를 작성 중이므로 최대 절전 모드 세션 개체에 액세스해야합니다. 인터셉터를 사용하여 최대 절전 모드 세션에 직접 접근 할 수 있습니까?인터셉터에서 최대 절전 모드로 전환

내가하려는 것은 최대 절전 모드에 연결된 데이터베이스를 찾는 것입니다. 여러 가지 이유로 스레드 로컬 데이터로 저장하는 것은 비현실적입니다.

답변

0

o.h.Interceptor을 통해서도 o.h.EmptyInterceptor을 통해서도 세션 개체를 가져올 수있는 "공식적인"방법이없는 것 같습니다. 또한, Interceptor의 자바 독은 말한다 :

각 세션에 대해 지정 될 수 SessionFactory에, 또는 새로운 인스턴스를위한 인터셉터의 단일 인스턴스가있을 수 있습니다. 접근 방식이 사용되는 경우 세션 을 직렬화 할 수 있으면 인터셉터를 직렬화 할 수 있어야합니다. 즉, SessionFactory 범위의 인터셉터가 readResolve()를 구현해야합니다.

세션을 콜백에서 호출 할 수 없으며 콜백 을 사용하면 콜렉션 또는 프록시를 지연 초기화 할 수 없습니다.

이 정보를 얻는 유일한 방법은 리플렉션을 사용하는 것으로 보이며 대답은 here입니다.

Session session = factory.openSession(interceptor); 
interceptor.setSession(session); 

그리고 당신은 요격 내부 세션이 있습니다

4

예, 방금 생성 한 후 인터셉터에 세션을 통과 ... 방법이있다! 다음을 기억하십시오 :

  1. 인터셉터는 실행중인 세션에 액세스 할 수 없으므로 직접 변경/추가하는 데 사용하지 마십시오.
  2. 같은 JDBC 연결에 일시적으로 세션을 열 수 있습니다
  3. 거래는 두 세션

    try {  
        Connection connection = mySession.connection(); 
        Session tempSession = HibernateUtil.getSessionFactory().openSession(connection); 
        // do something 
        tempSession.flush(); 
    } 
    finally { 
        tempSession.close(); 
    } 
    
에 대해 동일합니다
관련 문제