간단한 기본 사용법
public static void main(String[] args) {
// resources/META-INF/persistence.xml에 설정한 persistence-unit의 name 입력
EntityManagerFactory emf = Persistence.createEntityManagerFactory("persistence_unit_name");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
try {
/*
* ...JPA 코드...
*/
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
em.close();
}
emf.close();
}
- JPA는
Persistence
에서 시작
Persistence.createEntityManagerFactory("persistence unit name")
으로 EntityManagerFactory
생성
EntityManagerFactory
는 thread-safe 하므로 하나만 생성해서 애플리케이션 전역에서 공유
EntityManagerFactory.createEntityManager()
로 EntityManager
생성
EntityManager
는 thread-safe 하지 않으므로 한 쓰레드에서 사용 후 폐기
- JPA의 모든 데이터 변경은 트랜잭션 안에서 실행됨(
EntityTransaction
으로 관리)
- CRUD 명령어는
tx.begin()
과 tx.commit()
사이에서 실행
CREATE
Member member = new Member();
member.setName("김도진");
entityManager.persist();
entityManager.persist()
로 생성
READ
Long id = 1L;
Member member = entityManager.find(Member.class, id);
entityManager.find(Member.class, id)
로 조회
- 더 자세한 쿼리는 JPQL 사용
UPDATE
Long id = 1L;
Member member = entityManager.find(Member.class, id);
member.setName("원빈");
- DB에서 조회한 Entity의 값을 변경해서 업데이트
entityManager.persist()
사용하지 않아도 커밋 시점에 자동 업데이트
tx.commit()
으로 커밋하는 시점에 영속성 컨텍스트 안의 변경사항이 감지되어 자동으로 업데이트 됨
DELETE
Long id = 1L;
Member member = entityManager.find(Member.class, id);
entityManager.remove(member);
- DB에서 조회한 Entity를
entityManager.remove()
로 삭제