JPA 동작 방식
엔티티 매니저 설정
persistence.xml의 설정 정보를 사용해 엔티티 매니저 팩토리를 생성한다. 이를 통해 JPA를 동작시키기 위한 기반 객체를 만들고, JPA 구현체에 따라 데이터베이스 커넥션 풀도 생성한다. 때문에 엔티티 매니저 팩토리를 생성하는 비용은 아주 크다. 따라서 엔티티 매니저 팩토리는 애플리케이션 전체에서 딱 한 번만 생성하고 공유해서 사용해야 한다.
엔티티 매니저 생성
엔티티 맨니저를 사용해서 엔티티를 데이터베이스에 등록/수정/삭제/조회 할 수 있다.
엔티티 매니저는 데이터베이스 커넥션과 밀접한 관계까 있으므로 스레드간에 공유하거나 재사용하면 안된다.
종료
사용이 끝난 엔티티 매니저는 종료하고, 애플리케이션을 종료할 때 엔티티 매니저 팩토리도 종료해야 한다.
트랜잭션 관리
JPA를 사용하면 항상 트랜잭션 안에서 데이터를 변경해야 한다. 트랜잭션을 시작하려면 엔티티 매니저에서 트랜잭션 API를 받아와야 한다.
트랜잭션 API를 사용해서 비즈니스 로직이 정상 동작하면 트랜잭션을 커밋하고 예외가 발생하면 트랜잭션을 롤백한다.
비즈니스 로직
등록 : persist(T)
수정 : X (더티체킹)
삭제 : remove(T)
한 건 조회 : find(T.class, id)
JPQL
검색 조건이 포함된 SQL을 사용해야 할 때 JPA는 JPQL(Java Persistent Query Langauage)라는 쿼리 언어로 해결한다.
- JPQL은 엔티티 객체를 대상으로 쿼리한다.
- SQL은 데이터베이스 테이블을 대상으로 쿼리한다.
- JPQL은 데이터베이스 테이블을 전혀 알지 못한다.
출 처 : 자바 ORM 표준 JPA 프로그래밍 - 김영한