JPQL, 영속성 컨텍스트 (Persistence Context)

화낼거양's avatar
Nov 20, 2024
JPQL, 영속성 컨텍스트 (Persistence Context)
 
 

JPQL (Java Persistence Query Language)

 
JPQL은 JPA(Java Persistence API)의 일환으로, 엔티티 객체를 대상으로 하는 쿼리 언어입니다. SQL과 유사한 문법을 사용하지만, 데이터베이스의 테이블이 아닌 엔티티 객체를 대상으로 쿼리를 작성한다는 점이 다릅니다.
  • 객체 지향 쿼리: JPQL은 객체 지향적인 쿼리 언어로, 데이터베이스 테이블 대신 엔티티와 그 속성에 대해 쿼리를 수행합니다.
  • 문법: JPQL의 문법은 SQL과 유사하지만, 엔티티 클래스와 속성을 사용합니다. 예를 들어, SELECT e FROM Employee e WHERE e.name = :name는 Employee 엔티티에서 이름이 특정 값인 객체를 선택하는 쿼리입니다.
 

예제

String jpql = "SELECT e FROM Employee e WHERE e.name = :name"; TypedQuery<Employee> query = entityManager.createQuery(jpql, Employee.class); query.setParameter("name", "John"); List<Employee> results = query.getResultList();
 
 
 

영속성 컨텍스트 (Persistence Context)

 
영속성 컨텍스트는 엔티티 객체의 상태를 관리하는 환경입니다. JPA는 엔티티 매니저를 통해 영속성 컨텍스트를 관리하며, 이 컨텍스트 내에서 엔티티 객체의 생명주기를 제어합니다.
  • 1차 캐시: 영속성 컨텍스트는 1차 캐시로서 역할을 하여, 같은 영속성 컨텍스트 내에서는 동일한 엔티티를 여러 번 조회해도 같은 인스턴스를 반환합니다.
  • 변경 감지: 영속성 컨텍스트는 엔티티 객체의 변경 사항을 감지하고, 트랜잭션이 끝날 때 데이터베이스에 반영합니다.
  • 지연 로딩: 엔티티가 실제로 필요할 때까지 데이터베이스 접근을 지연시키는 기법을 사용할 수 있습니다.

예제

 
// 영속성 컨텍스트에 엔티티 저장 Employee employee = new Employee(); employee.setName("John"); entityManager.persist(employee); // 영속성 컨텍스트에서 엔티티 조회 Employee found = entityManager.find(Employee.class, employee.getId());
 

영속성 컨텍스트 요약

영속성 컨텍스트는 JPA의 핵심 개념으로, 성능 최적화, 데이터 일관성, 상태 관리 등의 여러 이점을 제공합니다. 이를 통해 개발자는 더 쉽게 데이터베이스와 상호 작용할 수 있고, 엔티티 객체를 보다 효율적으로 관리할 수 있습니다.
Share article

moohyun