2장 JPA 시작

자바 ORM 표준 JPA 프로그래밍 2장을 요약한 내용 입니다.

데이터베이스 방언

JPA는 특정 데이터베이스에 종속적이지 않은 기술이다.** 따라서 다른 데이터베이스로 손쉽게 교체할 수 있다.

데이터베이스 마다 어떤 부분이 다를까?

데이터 타입 : 가변 문자 타입으로 MySQLVARCHAR, 오라클VARCHAR2를 사용한다.

다른 함수명 : 문자열을 자르는 함수로 SQL 표준은 SUBSTRING()을 사용하지만 오라클SUBSTER()을 사용한다.

페이징 처리 : MySQLLIMIT를 사용하지만 오라클ROWNUM을 사용한다.

이처럼 SQL 표준을 지키지 않거나 특정 데이터베이스만의 고유한 기능을 JPA에서는 방언(Dialect)이라 한다.

개발자는 JPA가 제공하는 표준 문법에 맞추어 JPA를 사용하면 되고, 특정 데이터베이스에 의존적인 SQL은 데이터베이스 방언이 처리해준다.

엔티티 매니저 설정

엔티티 매니저 팩토리 생성

JPA를 시작하려면 우선 persistence.xml의 설정 정보를 사용해서 엔티티 매니저 팩토리를 생성해야 한다. 이때 Persistence 클래스를 사용하는데 이 클래스는 엔티티 매니저 팩토리를 생성해서 JPA를 사용할 수 있게 준비한다.

EntityManagerFactory emf = 
	Persistence.createEntityManagerFactory("jpabook");

엔티티 매니저 팩토리는 애플리케이션 전체에서 딱 한 번만 생성하고 공유해서 사용해야 한다.

엔티티 매니저 생성

EntityManger em = emf.createEntityManager();

엔티티 매니저를 사용해서 엔티티를 데이터베이스에 등록/수정/삭제/조회할 수 있다. 참고로 엔티티 매니저는 데이터베이스 커넥션과 밀접한 관계가 있으므로 스레드간에 공유하거나 재사용하면 안 된다.

트랜잭션 관리

JPA를 사용하면 항상 트랜잭션 안에서 데이터를 변경해야 한다. 트랜잭션 없이 데이터를 변경하면 예외가 발생한다.

JPQL

하나 이상의 회원 목록을 조회하는 다음 코드를 살펴보자

//목록 조회
TypedQuery<Member> query = 
	em.createQuery("select m from Member m", Member.class);
List<Member> members = query.getResultList();
  • JPQL은 엔티티 객체를 대상으로 쿼리한다. 쉽게 이야기해서 클래스와 필드를 대상으로 쿼리한다.

  • SQL은 데이터베이스 테이블을 대상으로 쿼리한다.

JPQL은 데이터베이스 테이블을 전혀 알지 못하고 엔티티 객체를 참조한다.

정리

JPA가 반복적인 JDBC API와 결과 값 매핑을 처리해준 덕분에 코드량이 상당히 많이 줄어든 것은 물론이고 심지어 SQL도 작성할 필요가 없었다. 하지만 코드량을 줄이고 SQL을 자동 생성하는 것은 JPA가 제공하는 전체 기능 중 일부에 불과하다.

Last updated