🔙뒤로가기

요구사항 추가

package hellojpa;

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

@Entity
@Table(name = "member")//생략해도 됨
public class Member {

    @Id
    private Long 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;

}

실행 로그

Hibernate: 
    
    drop table member if exists
Hibernate: 
    
    create table member (
       id bigint not null,
        age integer,
        createdDate timestamp,
        description clob,
        lastModifiedDate timestamp,
        name varchar(255),
        roleType varchar(255),
        primary key (id)
    )

매핑 어노테이션 정리

hibernate.hbm2ddl.auto

어노테이션 설명
@Column 컬럼 매핑
@Temporal 날짜 타입 매핑
@Enumerated enum 타입 매핑
@Lob BLOB, CLOB 매핑
@Transient 특정 필드를 컬럼에 매핑하지 않음(매핑 무시)

@Column

속성 설명 기본값
name 필드와 매핑할 테이블의 컬럼 이름 객체 필드 이름
insertable,
updatable 등록, 변경 가능 여부 TRUE
nullable(DDL) null 값의 허용 여부를 설정한다. false로 설정하면 DDL 생성 시에
not null 제약조건이 붙는다.
unique(DDL) @Table의 uniqueConstraints와 같지만 한 컬럼에 간단히 유니크 제약조건을 걸 때 사용한다. @Table에서 선언하는 게 나음.
columnDefinition
(DDL) 데이터베이스 컬럼 정보를 직접 줄 수 있다.
ex) varchar(100) default ‘EMPTY’ 필드의 자바 타입과 방언 정보
length(DDL) 문자 길이 제약조건, String 타입에만 사용한다. 255
precision,
scale(DDL) BigDecimal 타입에서 사용한다(BigInteger도 사용할 수 있다).
precision은 소수점을 포함한 전체 자릿수를, scale은 소수의 자릿수다. 참고로 double, float 타입에는 적용되지 않는다. 아주 큰 숫자나 정밀한 소수를 다루어야 할 때만 사용한다. precision=19,
scale=2

@Enumerated

자바 enum 타입을 매핑할 때 사용

<aside> ⚠️ 주의! ORDINAL 사용 X ORDINAL은 열거타입의 순서를 인식해서 저장을 하기 때문이다. 만약 추후에 운영 서비스에서 수정사항이 생겨 순서가 바뀌었을 때에도 기존에 저장된 순서를 그대로 따라가기 때문에 데이터베이스에 저장된 실제 데이터가 엉망으로 꼬이게 된다. 따라서 enum을 매핑할땐 반드시 @Enumerated(EnumType.STRING)을 쓰자

</aside>

속성 설명 기본값
value • EnumType.ORDINAL: enum 순서를 데이터베이스에 저장
• EnumType.STRING: enum 이름을 데이터베이스에 저장 EnumType.ORDINAL

@Temporal

날짜 타입(java.util.Date, java.util.Calendar)을 매핑할 때 사용

<aside> ⚠️

참고: LocalDate, LocalDateTime을 사용할 때는 생략 가능(최신 하이버네이트 지원)

</aside>