JPA를 최대한 활용하려면?
- 객체와 테이블을 올바르게 설계하고 매핑해야 함
- JPA 내부 동작 방식을 이해해야 함 (디버깅, 장애 상황 대처)
JPA 구동 방식

- Persistence에서 설정 정보 조회 (META-INF/persistence.xml)
- EntityManagerFactory 생성
- EntityManager 생성
주의
- 엔티티 매니저 팩토리는 하나만 생성해서 애플리케이션 전체에서 공유
- 엔티티 매니저는 쓰레드간에 공유 X (사용하고 버려야 함)
- JPA의 모든 데이터 변경은 트랜잭션 안에서 실행
JPQL
- JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어 제공
- SQL과 문법 유사, SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN 지원
- JPQL은 엔티티 객체를 대상으로 쿼리, SQL은 데이터베이스 테이블을 대상으로 쿼리
- SQL을 추상화해서 특정 데이터베이스 SQL에 의존 X
- JPQL을 한마디로 정의하면 객체 지향 SQL
JPA 동작 확인 및 간단한 실습 코드
public class JpaMain {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
try {
List<Member> result = em.createQuery("select m from Member as m where m.id < 100", Member.class)
.setFirstResult(0)
.setMaxResults(2)
.getResultList();
for (Member member : result) {
System.out.println(member.getName());
}
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
em.close();
emf.close();
}
}
}