Hibernate의 세션 관리 이해: openSession() 대 getCurrentSession()
Hibernate는 세션 관리를 위한 두 가지 방법인 openSession() 및 getCurrentSession()을 제공합니다. ). 각각은 특정한 용도를 갖고 있으며 다양한 제어 수준을 제공합니다.
1. hibernate.current_session_context_class:
이 속성은 Hibernate가 웹 애플리케이션 컨텍스트에서 세션을 관리하는 방법을 결정합니다. "스레드" 또는 "관리형"으로 설정할 수 있습니다.
2. openSession() 대 getCurrentSession():
openSession(): 새 세션을 생성합니다. 세션은 어떤 컨텍스트에도 바인딩되지 않으며 사용 후 명시적으로 닫혀야 합니다. 일반적으로 세션 수명주기를 완전히 제어해야 할 때 사용됩니다.
getCurrentSession(): 현재 스레드 또는 컨텍스트에 바인딩된 세션을 가져옵니다. 세션이 없으면 새 세션을 열고 현재 컨텍스트에 바인딩합니다. 이 방법은 일반적으로 단일 HTTP 요청 내에서 세션이 지속되어야 하는 웹 애플리케이션에서 선호됩니다.
요약하면 hibernate.current_session_context_class를 "thread"로 설정하면 서블릿 필터 내에서 getCurrentSession()을 사용할 수 있습니다. 또는 기타 스레드 기반 구성 요소를 사용하여 세션을 열고 액세스합니다.
3. 세션 수명:
웹 앱당 하나의 세션: 권장되지 않습니다. 세션은 스레드로부터 안전하지 않고 여러 요청 스레드가 잠재적으로 동일한 세션에 액세스하여 동시성 문제를 일으킬 수 있으므로 권장되지 않습니다.
요청당 하나의 세션: 웹 애플리케이션에서 선호됩니다. 각 요청에 별도의 세션이 있으므로 동시성 및 스레드 안전 문제가 제거됩니다.
위 내용은 Hibernate 세션 관리: openSession() 대 getCurrentSession() - 어느 것을 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!