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