Post

Hibernate Sessions

1. Sessions

세션은 데이터베이스와 물리적으로 연결하는데 사용된다. 세션 개체는 가볍고 데이터베이스와의 상호 작용이 필요할 때마다 인스턴스화되도록 설계되었다. 영구 개체는 세션 개체를 통해 저장 및 검색된다.

세션 개체는 일반적으로 스레드 세이프가 아니며 필요에 따라 생성 및 삭제해야 하므로 세션 개체를 오랫동안 열어 두면 안 된다. 세션의 주요 기능은 매핑된 엔티티 클래스의 인스턴스에 대한 작업을 제공, 생성, 읽기 및 삭제하는 것이다.

인스턴스는 특정 시점에 다음 세 가지 상태 중 하나로 존재할 수 있다.

  • transient: 세션과 연결되지 않고 데이터베이스에 표시되지 않으며 식별자 값도 없는 영구 클래스의 새 인스턴스는 Hibernate에서 일시적인 것으로 간주된다.

  • persistent: 임시 인스턴스를 세션에 연결하여 영구적으로 만들 수 있다. 영구 인스턴스는 데이터베이스에 표현, 식별자 값을 가지며 세션과 연결된다.

  • detached: 최대 절전 모드 세션을 닫으면 영구 인스턴스가 분리된 인스턴스가 된다.

세션 인스턴스는 해당 영구 클래스가 직렬화 가능한 경우 직렬화 가능하다. 일반적인 트랜잭션은 다음 관용구를 사용해야 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Session session = factory.openSession();
Transaction tx = null;

try {
   tx = session.beginTransaction();
   // do some work
   ...
   tx.commit();
}

catch (Exception e) {
   if (tx!=null) tx.rollback();
   e.printStackTrace();
} finally {
   session.close();
}

세션에서 예외가 발생하면 트랜잭션을 롤백하고 세션을 삭제해야 한다.

2. 세션 인터페이스 방법

세션 인터페이스에서 제공하는 방법은 여러 가지가 있지만, 몇 가지 중요한 방법만 나열한다. Hibernate 설명서에서 세션 및 세션 팩토리와 관련된 전체 방법 목록을 확인할 수 있다.

Session MethodsDescription
Transaction beginTransaction()작업 단위를 시작하고 연결된 트랜잭션 개체를 반환한다.
void cancelQuery()현재 쿼리 실행 취소한다.
void clear()세션을 완전히 지운다.
Connection close()JDBC 연결을 해제하고 정리하여 세션을 종료한다.
Criteria createCriteria(Class persistentClass)지정된 엔티티 클래스 또는 엔티티 클래스의 수퍼 클래스에 대해 새 기준 인스턴스를 만든다.
Criteria createCriteria(String entityName)지정된 엔티티 이름에 대해 새 기준 인스턴스를 만든다.
Serializable getIdentifier(Object object)이 세션과 연결된 지정된 엔티티의 식별자 값을 반환한다.
Query createFilter(Object collection, String queryString)지정된 컬렉션 및 필터 문자열에 대한 쿼리의 새 인스턴스를 만든다.
Query createQuery(String queryString)지정된 HQL 쿼리 문자열에 대한 쿼리의 새 인스턴스를 만든다.
SQLQuery createSQLQuery(String queryString)지정된 SQL 쿼리 문자열에 대해 SQLQuery의 새 인스턴스를 만든다.
void delete(Object object)데이터스토어에서 영구 인스턴스를 제거한다.
void delete(String entityName, Object object)데이터스토어에서 영구 인스턴스를 제거한다.
Session get(String entityName, Serializable id)지정된 명명된 엔티티의 영구 인스턴스를 지정된 식별자와 함께 반환하거나, 해당 영구 인스턴스가 없으면 null을 반환한다.
SessionFactory getSessionFactory()이 세션을 만든 세션 팩토리를 가져온다.
void refresh(Object object)기본 데이터베이스에서 지정된 인스턴스의 상태를 다시 읽는다.
Transaction getTransaction()이 세션과 연결된 트랜잭션 인스턴스를 가져온다.
boolean isConnected()세션이 현재 연결되어 있는지 확인한다.
boolean isDirty()이 세션에 데이터베이스와 동기화해야 하는 변경 사항이 있는가?
boolean isOpen()세션이 아직 열려 있는지 확인한다.
Serializable save(Object object)지정된 일시적 인스턴스를 유지하고 먼저 생성된 식별자를 할당한다.
void saveOrUpdate(Object object)지정된 인스턴스를 저장(개체)하거나 업데이트(개체)한다.
void update(Object object)영구 인스턴스를 지정된 분리된 인스턴스의 식별자로 업데이트한다.
void update(String entityName, Object object)영구 인스턴스를 지정된 분리된 인스턴스의 식별자로 업데이트한다.

[출처 및 참고]

This post is licensed under CC BY 4.0 by the author.