
도메인 모델을 데이터베이스로 맵핑하는 thread-safe하고 immutable한 표현이다.
org.hibernate.Session 인스턴스의 팩토리
JPA의 EntityManagerFactory와 동등한 명세이며 기본적으로 이 둘은 동일한 SessionFactory 구현에 수렴.
(위 다이어그램을 보면, EntityManagerFactory와 SessionFactory는 인터페이스이고 SessionFactoryImpl이 구현체이다. 두 인터페이스를 SessionFactoryImpl가 구현한다는 뜻)
SessionFactory 하나를 생성하기 위해서는 매우 비싼값을 치러야한다(시스템 자원을 많이 소모한다). 그래서, 주어진 어떤 데이터베이스에 대해 애플리케이션은 오직 하나의 연관된 SessionFactory를 가져야한다.
SessionFactory는 2단계 캐시, 커넥션 풀, 트랜잭션 시스템 통합 등과 같이 Hibernate가 모든 세션에서 사용하는 서비스를 유지 관리한다.
세션의 라이프사이클은 논리적 트랜잭션의 시작과 끝에 의해 제한된다. 하지만 긴 논리적 트랜잭션은 여러 데이터베이스 트랜잭션에 걸쳐 있을 수 있다.
세션의 주된 목적은 매핑된 엔티티 클래스들의 인스턴스들에 대한 생성, 판독 및 삭제 동작들을 제공하는 것이다. 하나의 인스턴스는 주어진 오픈 세션에 관하여 다음과 같은 세 가지 상태들 중 하나에 있을 수 있다
객체를 삽입, 갱신, 삭제하는 메소드를 제공
또한 Transaction, Query 및 Criteria에 대한 팩토리 메소드를 제공합니다
싱글 스레드로 동작시켜야하는, 개념적으로 짧은 생명주기를 가진 오브젝트로 모델링된 "작업 단위"이다.
JPA에서는 Session을 EntityManager라고 이름 짓는다.
뒷 단에서, 하이버네이트 Session은 JDBC java.sql.Connection을 감싸고 org.hibernate.Transaction의 팩토리로 동작한다.
하이버네이트 Session은 일반적으로 애플리케이션 도메인 모델의 "반복가능한 읽기" Persistence context(first level cache)를 유지관리한다.