세션이 플러시되거나 트랜잭션이 커밋되면 세션 자체가 최대 절전 모드로 닫힌다는 것을 읽었습니다. 그래서, 같은 스레드에서 이전에 닫혀 있던 Hibernate Session을 재사용 할 수 있습니까?스레드에서 Hibernate 세션 재사용
감사합니다.
세션이 플러시되거나 트랜잭션이 커밋되면 세션 자체가 최대 절전 모드로 닫힌다는 것을 읽었습니다. 그래서, 같은 스레드에서 이전에 닫혀 있던 Hibernate Session을 재사용 할 수 있습니까?스레드에서 Hibernate 세션 재사용
감사합니다.
세션이 플러시되거나 트랜잭션이 커밋되면 세션 자체가 최대 절전 모드로 닫힙니다.
flush
는 하지 세션을 닫는다. 당신이 current_session_context_class
를 구성한 경우, 최대 절전 모드 3.1에서 시작하여 commit
세션 닫힙니다에 "thread
"또는 "jta
", 또는 당신은 TransactionManagerLookup
(필수 JTA)를 사용하고 getCurrentSession()
경우.
Session session = factory.getCurrentSession();
Transaction tx = session.beginTransaction();
Product p = new Product();
session.persist(p);
session.flush();
System.out.println(session.isOpen()); // prints true
p.setName("foo");
session.merge(p);
tx.commit();
System.out.println(session.isOpen()); // prints false
이 this threa 개발과 이에 대한 배경에 대한 문서의 섹션 2.5. Contextual sessions을 참조하십시오
다음 코드는이 (여기 thead
에 current_session_context_class
세트)을 보여줍니다.
그래서 이전에 닫은 동일한 스레드에서 최대 절전 모드 세션을 재사용 할 수 있습니까?
중 하나는 내장 된 "managed
"전략 (managed
에 current_session_context_class
속성을 설정) 사용하거나 ThreadLocalSessionContext
에서 파생 된 사용자 정의 CurrentSessionContext
를 사용하고 ThreadLocalSessionContet.isAutoCloseEnabled()
우선합니다.
다시, 위의 링크를 참조 또한 What about the extended Session pattern for long Conversations?
틀린입니다. 세션은 열려 있고 새로운 트랜잭션이 시작됩니다. 가장 중요한 것은 현재 세션에 연결된 모든 객체가 연결되어 있기 때문에 세션을 지우지 않으면 여기에 메모리 누수가있는 것입니다.
는 항상 true –
세션을 또한 롤백 닫습니다하지 않을 경우 current_session_context_class "스레드"또는 "JTA"에? –