[JPA] 앤티티 매핑
객체와 테이블 매핑 : @Entity, @Table
기본 키 매핑 : @Id
필드와 컬럼 매핑 : @Column
연관 관계 매핑 : @ManyToOne, @JoinColumn
@Entity
테이블과 매핑할 클래스에 붙인다. @Entity가 붙은 클래스는 JPA가 관리하며 엔티티라 부른다.
@Entity(name = "")속성을 사용하여 엔티티의 이름을 지정할 수 있다. 기본 값은 클래스 이름이다.
@Entity를 적용 시 주의사항은 아래와 같다.
* 기본 생성자는 필수(파라미터가 없는 public, protected생성자)
* final 클래스, enum, interface, inner클래스는 사용불가
* 저장할 필드에 final을 사용하면 안 된다.
@Table
엔티티와 매핑할 테이블을 지정한다. 생략하면 매핑한 엔티티 이름을 테이블 이름으로 지정함.
name : 매핑할 테이블 이름 (기본 값으로 엔티티 이름을 사용)
catalog : catalog 기능이 있는 데이터베이스에서 catalog를 매핑
schema : schema 기능이 있는 데이터베이스에서 schema를 매핑
다양한 매핑
@Entity
@Table(name="MEMBER")
public class Member {
@Id
@Column(name = "ID")
private String id;
@Column(name = "NAME")
private String name;
private Integer age;
@Enumerated(EnumType.String)
private RoleType roleType;
@Temporal(TemporalType.TIMESTAMP)
private Date createdDate;
@Temporal(TemporalType.TIMESTAMP)
private Date lastModifiedDate;
@Lob
private String description;
...
}
public enum RoloType {
ADMIN, USER
}
1. roleType: enum을 사용하고 싶다면 @Enumerated어노테이션으로 매핑한다.
2. createdDate, lastModifiedDate : 자바의 날짜 타입은 @Temporal을 사용해서 매핑한다.
3. description : 필드의 길이제한이 없이 만들고 싶다면 @Lob을 사용한다. CLOB, BLOB타입으로 매핑됨.
데이터 베이스 스키마 자동 생성 옵션
create : 기존 테이블을 삭제하고 새로 생성 drop + create
create-drop : create 속성에 추가로 drop한다. 애플리케이션이 종료될 때 DDL을 제거함
update : 데이터베이스 테이블과 엔티티 매핑정보를 비교해서 변경 사항만 수정
vaildate : 데이터베이스 테이블과 엔티티 매핑정보를 비교해서 차이가 있으면 경고를 남기고 애플리케이션을 실행하지 않는다. 이 설정은 DDL을 수정하지 않음
none : 자동 생성 기능을 사용하지 않으면 유효하지 않은 값을 주면 됨 (none은 유효하지 않은 옵션 값)
운영 서버에서 create, create-drop, update같은 DDL옵션을 주는 것을 주의하자.
개발 초기 - create, update
초기화 상태로 자동화된 테스트를 진행하는 개발자 환경, CI 서버 - create, create-drop
테스트 서버 - update, vaildate
운영 서버 - vaildate, none
DDL 생성 기능
컬럼에 추가적인 옵션을 부여할 수 있음
@Column(nullable = false, length = 10)
private username
nullable : null의 여부 기본 값은 true이다. 만약 객체 타입이 아닌 자바 기본 타입에서 컬럼어노테이션 없다면 nullable=false로 생성된다.
length : 문자의 크기를 지정
테이블의 제약 조건
@Tabel(name = "MEMBER", uniqueConstraints = {@UniqueConstraint(
name = "NAME_AGE_UNIQUE"m
columnNames = {"NAME", "AGE"})})
uniqueConstraints로 유니크 제약조건을 지정할 수 있다.
DDL은 테이블을 생성할 때 영향을 주고 JPA실행 로직에는 영향이 없다.
기본 키 매핑
기본 키 생성 전략은 직접 할당과 자동생성 방식이 있다. 자동 생성 방식은 벤더마다 지원하는 방식이 달라 여러가지가 있음. 자동 생성 전략은 @Id아래 @GeneratedValue어노테이션을 추가하고 원하는 전략을 선택하면 됨.
자동 생성
- IDENTITY : 기본 키 생성을 데이터베이스에 위임
-SEQUENCE : 데이터베이스 시퀀스를 사용해서 기본 키를 할당한다.
-TABLE : 키 생성 테이블을 사용한다.
@Transient
이 필드는 매핑하지 않는다. 데이터베이스에서 저장, 조회를 하지 않는다. 객체에 임시로 어떤 값을 보관하고 싶을 때 사용한다.