김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 정리
JPA(Java Persistence API)는 ORM(Object-Relational Mapping) 기술의 표준 인터페이스입니다.
JPA의 구동은 Persistence 클래스로부터 시작합니다.
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
Persistence.xml 파일에 정의한 persistence-unit 이름을 넘겨주어야 합니다.EntityManagerFactory는 데이터베이스 당 하나만 생성해 애플리케이션 전체에서 공유합니다.EntityManager는 고객 요청 단위로 생성해서 사용하고 종료해야 합니다.
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
EntityManager를 생성합니다.em.close() 호출로 반드시 반환해야 합니다.JPA에서 엔티티 클래스는 데이터베이스 테이블과 매핑됩니다.
@Entity
public class Member {
@Id
private Long id;
private String name;
// Getter, Setter
}
@Entity를 선언해 JPA가 관리하도록 합니다.@Id를 통해 PK(Primary Key)를 지정합니다.CREATE TABLE Member (
id BIGINT NOT NULL,
name VARCHAR(255),
PRIMARY KEY (id)
);
Member member = new Member();
member.setId(1L);
member.setName("HelloJPA");
em.persist(member);
Member findMember = em.find(Member.class, 1L);
findMember.setName("HelloUpdated");
JPA는 트랜잭션 커밋 시점에 변경 감지를 통해 UPDATE 쿼리를 자동 생성합니다.
em.remove(findMember);
Member findOne = em.find(Member.class, 1L);
EntityManagerFactory는 애플리케이션당 하나만 생성해서 공유합니다.EntityManager는 쓰레드 간 공유하지 않고 요청 단위로 생성 후 종료합니다.JPA는 테이블이 아닌 엔티티 객체를 대상으로 쿼리를 작성합니다.
Member member = em.find(Member.class, 1L);
List<Member> result = em.createQuery("SELECT m FROM Member m", Member.class)
.getResultList();
List<Member> result = em.createQuery("SELECT m FROM Member m", Member.class)
.setFirstResult(0)
.setMaxResults(10)
.getResultList();
방언에 따라
LIMIT OFFSET,ROWNUM등 적절히 변환됩니다.
| 항목 | JPQL | SQL |
|---|---|---|
| 대상 | 엔티티 객체 | 테이블 |
| 목적 | 객체지향 쿼리 | 관계형 데이터 조회 |
| 장점 | DB 독립성 확보, 유지보수 용이 | 세밀한 최적화 가능 |