반응형
JPA는 ORM, 객체와 테이블을 매핑하는 프레임워크를 말한다.
객체와 테이블을 정확하게 매핑하기 위해 다음과 같은 어노테이션들을 사용한다.
- 객체와 테이블
- @Entity - 테이블과 매핑할 클래스에 @Entity 어노테이션을 추가하는 것으로 해당 클래스가 데이터베이스와 매핑할 객체임을 알려줌.
Entity의 중요한 3가지 원칙
1. 기본 생성자를 꼭 가지고 있을 것
2. final class, interface, enum, inner 클래스가 아닌 기본 클래스
3. 저장할 필드에 final을 사용하지 말 - @Table - Entity와 매핑할 테이블의 이름으로 직접 지정
@Table(schema = "Schema Name", name="Table Name") 에서 처럼 schema 명칭과 table name으로 구성되어지며, schema 명은 생략가능하다.
스키마 매핑과 테이블 매핑 외에 DDL 유니크 제약 조건 추가 및 Catalog 매핑을 추가할 수 있다.
- @Entity - 테이블과 매핑할 클래스에 @Entity 어노테이션을 추가하는 것으로 해당 클래스가 데이터베이스와 매핑할 객체임을 알려줌.
- 프라이머리 키 매핑
- @Id - 프라이머리 키는 기본 키라고도 하며, 관계형 데이터베이스에서 각 레코드의 식별자로 이용하기에 적합한 후보 키 가운데, 설계자가 일반적으로 이용되어야 한다고 정해 놓은 것을 말한다. JPA에서는 가능한 프라이머리(기본)키를 1개만 지정할 것을 권장한다. 이를테면 MariaDB의 AUTO_INCREMENT와 같이 자동 증가하게 할 수 있고, 아니면 직접 기본 키를 지정할 수도 있다.
- 필드와 컬럼 매핑
- @GeneratedValue - 프라이머리(기본)키를 생성할 때 직접 할당과 자동 생성으로 나뉜다.
@GeneratedValue(strategy = GenerationType.IDENTITY)
JPA에서 자동 생성에는 3가지 전략이 있다.
1. IDENTITY : 프라이머리(기본)키 생성을 데이터베이스에 위임
2. SEQUENCE : 데이터베이스 시퀀스를 이용해서 기본 키를 할당
3. TABLE : 키 생성 테이블을 이 - @Column - 필드 매핑. JPA에서 @Column을 명시하지 않으면 해당 필드의 이름으로 매핑한다.
테이블의 컬럼명과 클래스의 필드명이 서로 다를 경우 @Column의 name속성을 이용해서 이러한 문제를 해결할 수 있으며, DDL 생성 기능으로 nullable은 null 제약 조건, length는 길이 제약 조건 등을 사용할 수 있다.
@Column(name = "member_id", nullable = true, length = 20) - @Enumerated - ENUM 타입 매핑
@Enumerated 에는 2가지 타입이 있음.
1. EnumType.ORDINAL
2. EnumType.STRING
ORDINAL은 Enum에 정의된 순서대로 JPA가 이용하며, 만약 순서가 변경된다면 가능한 STRING 타입을 이용하는 것이 좋다. STRING 타입은 데이터베이스에 문자로 저장된다.
- @GeneratedValue - 프라이머리(기본)키를 생성할 때 직접 할당과 자동 생성으로 나뉜다.
- 연관관계
- @OneToOne - 일대일 매핑
- @OneToMany - 일대다 매핑
- @ManyToOne - 다대일 매핑
- @ManyToMany - 다대다 매핑
반응형