Search
📃

JPA (1)

태그
spring boot
JPA는 매핑 어노테이션을 분석해서 어떤 객체가 어떤 테이블과 관계가 있는지 알아낸다

@Entity

이 클래스를 테이블과 매핑한다고 JPA에게 알려준다.
이렇게 @Entity가 사용된 클래스를 엔티티 클래스라고 한다.

@Table

엔티티 클래스에 매핑할 테이블 정보를 알려준다.

@Id

엔티티 클래스의 필드를 테이블의 기본키에 매핑한다.
이렇게 @Id가 사용된 필드를 식별자 필드라 한다.
<참고> JPA 어노테이션의 패키지는 javax.persistence이다.
JavaScript
복사

persistence.xml 설정

JPA는 persistence.xml을 사용해서 필요한 설정 정보를 관리한다.
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" version="2.1">
JavaScript
복사
→ 설정 파일은 persistence로 시작한다. 이곳에 XML 네임스페이스와 사용할 버전을 지정한다.
<persistence-unit name="jpabook">
JavaScript
복사
→ JPA 설정은 영속성 유닛이라는 것부터 시작하는데 일반적으로 연결할 데이터베이스 당 하나의 영속성 유닛을 등록한다.
javax.persistence.jdbc.driver: JDBC 드라이버 javax.persistence.jdbc.user: 데이터베이스 접속 아이디 ...
JavaScript
복사
→ 이름이 javax.persistence로 시작하는 속성은 JPA 표준 속성으로 특정 구현체에 종속되지 않는다.
hibernate.dialect: 데이터베이스 방언 설정
JavaScript
복사
→ 반면에 hibernate로 시작하는 속성은 하이버네이트 전용 속성으로 하이버네이트에서만 사용할 수 있다.
가장 중요한 속성은 데이터베이스 방언을 설정하는 hibernate.dialect이다.

데이터베이스 방언

JPA는 특정 데이터베이스에 종속적이지 않은 기술이다. 따라서 다른 데이터베이스로 손쉽게 교체할 수 있다. 그런데 각 데이터베이스가 제공하는 SQL 문법과 함수가 조금씩 다르다는 문제점이 있다.
데이터 타입: 가변 문자 타입으로 MYSQL은 VARCHAR, 오라클은 VARCHAR2를 사용한다.
다른 함수명: 문자열을 자르는 함수로 SQL 표준은 SUBSTRING()을 사용하지만 오라클은 SUBSTR()을 사용한다.
페이징 처리: MYSQL은 LIMIT을 사용하지만 오라클은 ROWNUM을 사용한다.
→ 이처럼 SQL 표준을 지키지 않거나 특정 데이터베이스만의 고유한 기능을 JPA에서는 방언(Dialect)이라 한다.
→하이버네이트를 포함한 JPA 구현체들은 이런 문제를 해결하려고 다양한 데이터베이스 방언 클래스를 제공한다.
→ 개발자는 JPA가 제공하는 표준 문법에 맞추어 JPA를 사용하면 되고, 특정 데이터베이스에 의존적인 SQL은 데이터베이스 방언이 처리해준다.

참고

책 자바 ORM 표준 JPA 프로그래밍(김영한) 2장