파게로그

실습 3 (Mapping annotations) 본문

콤퓨타 왕기초/JPA

실습 3 (Mapping annotations)

파게 2021. 5. 27. 16:04

4@Column

name: 필드와 매핑할 테이블의 컬럼 이름

insertable, updatable: 읽기 전용(예를 들어 insertable=false라고 하면 DB의 갱신이 이루어지지 않음)

nullable: null 허용 여부 결정, DDL 생성 시 사용

unique: 유니크 제약 조건, DDL 생성 시 사용

columnDefinition, length, precision, scale: DDL 생성 시 사용

length: 데이터의 길이 설정, DDL 생성 시 사용

 

@Temporal

날짜 타입 매핑

@Temporal(TemporalType.DATE) private Date date; // 날짜

@Temporal(TemporalType.TIME) private Date time; // 시간

@Temporal(TemporalType.TIMESTAMP) private Date timestamp; // 날짜와 시간

java.util.Date, java.util.Calendar에만 사용할 수 있고, java.sql.Date에는 사용이 불가능하다

 

@Enumerated

열거형 매핑

@Enumerated(EnumType.ORDINAL) // 사용하면 골치가 아픔...

@Enumerated(EnumType.STRING) // 권장

 

@Lob

CLOB, BLOB 매핑

CLOB: String, char[], java.sql.CLOB

BLOB: byte[], java.sql.BLOB

 

@Lob // String 타입에 쓰면 CLOB이 됨

private String lobString;

 

@Lob // Byte[] 타입에 쓰면 BLOB이 됨

private byte[] lobByte;

 

@Transient

"이 필드는 객체에는 넣어두고 싶은데, DB에 매핑하고 싶지는 않아"

애플리케이션에서 DB에 저장하지 않는 필드

 

package helloJpa.entity;

import javax.persistence.*;
import java.util.Date;

@Entity
public class Member {
    enum MemberType { DIAMOND, GOLD, SILVER, BRONZE }

    @Id
    private long id;

    @Column(name="name")
    private String name;

    private int age;

    @Temporal(TemporalType.TIMESTAMP)
    private Date regDate;

    // @Enumerated(EnumType.ORDINAL) // DB에 0, 1, 2, ... 이렇게 숫자로 들어간다. enum 변경 때 곤란하다.
    @Enumerated(EnumType.STRING) // DB에 DIAMOND, GOLD, ... 이렇게 글자 그대로 들어간다.
    private MemberType memberType;

    // getter and setters
}

 

 

 

 

식별자 매핑

@Id (직접 매핑)

- IDENTITY: DB에 위임. MySQL

- SEQUENCE: 데이터베이스 시퀀스 오브젝트 사용. ORACLE

  @SequenceGenerator 필요

- TABLE: 키 생성용 테이블 사용. 모든 DB에서 사용

  @TableGenerator 필요

- AUTO: 방언에 따라 자동 지정. 기본값

ex) @Id @GeneratedValue(strategy = GenerationType.AUTO)

이렇게 하고 persist하는 객체에 대해서 setId()를 직접 하지 않으면, DB가 알아서 해준다.

 

권장하는 식별자 전략

기본 키 제약 조건: null 아님, 유일, 변하면 안된다

미래까지 이 조건을 만족하는 자연키는 찾기 어렵다. 대리키(대체키)를 사용하자.

권장: Long + 대체키(비즈니스와 관계없는 것) + 키 생성전략 사용 (비즈니스 키 조합을 권장하는 사람들도 있음)

'콤퓨타 왕기초 > JPA' 카테고리의 다른 글

JPA 내부 구조  (0) 2021.06.02
연관관계 매핑  (0) 2021.05.28
[실습] Mapping to DDL  (0) 2021.05.27
[실습] JPA in Maven project  (0) 2021.05.27
Why JPA?  (0) 2021.05.26
Comments