2017-11-27 2 views
1

사용하는 최상의 경우를 이해해야합니다. Hibernate.getCurrentSession()? 내가 이해 무엇다중 스레드 환경에서 Hibernate.getCurrentSession()

는 Hibernate.getCurrentSession을 처리 스레드()가 트랜잭션이 웹 응용 프로그램 (공유) 여러 요청 (스레드)가 사용되기 때문에이 웹 응용과 같은 멀티 스레드 환경 (스프링 MVC)에 유해하다는 것이다 누군가가 그 거래를 저지르기 전에.

 Req1 -> 
    Req2 -> WebApp(Spring MVC) | <-- (Hibernate Current Session Thread) 
    Req3 -> 

Hibernate.getCurrentSession의 사용에 대한 가장 좋은 경우는() 우리는 단일 스레드 응용 프로그램을 호출 실행 형 응용 프로그램 (스윙/데스크톱) 스탠드입니다. 이 경우 단일 스레드가 작동 중이므로 트랜잭션을 공유하는 데 문제가 없습니다.

 Event/Action -> Desktop(Swing) | <-- (Hibernate Current Session Thread) 

내가 그것 때문에 getCurrentSession() 메소드 내 제한 노출의 나의 이해 잘못 생각하는 경우 사람이 날 수정시겠습니까?

다른 사람들과 경험을 나누는 것이 나를 위해 가치를 부여 할 것입니다.

이 스레드에 안전하지 않습니다, EntityManagerHibernateSession 말하기 질문 일반적으로

+1

이해가 잘못되었습니다. 요청이 처리를 마칠 때까지 스레드를 다른 사용자가 사용할 수 없게됩니다. –

+0

@ M.Deinum Thanks. 따라서 다른 스레드가 차단되거나 최대 절전 모드에서 현재 세션을 가져 오려고 할 때 예외가 발생합니까? –

+1

아니요 그들은 자신의 스레드 바운드 세션을 갖지 않을 것입니다. –

답변

0

중복되지 않지만, 스프링 MVC의 맥락에서, 당신은 일반적으로 세션 당 요청 또는 거래 당 요청 패턴을 따른다 이는 본질적으로 엔티티 관리자가 단일 스레드에 바인딩된다는 것을 의미합니다.

관련 문제