필드와 컬럼 매핑

요구사항

  • 회원은 일반 회원과 관리자로 구분
  • 회원 가입일, 수정일 필요
  • 회원을 설명할 수 있는 필드가 있어야하고 길이 제한이 없어야한다.
package hellojpa;

public enum RoleType {
    USER, ADMIN
}
package hellojpa;
import javax.persistence.*;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
@Entity
public class Member {
    @Id
    private Long id;

    @Column(name = "name") //실제 DB 컬럼명
    private String username;

    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.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와 같지만,
한 컬럼에 간단히 유니크 제약 조건을 걸 때 사용
 
columnDefinition(DDL) 필드의 자바 타입, 방언 정보를 활용하여
데이터 베이스 컬럼 정보를 직접 줄 수 있다.
 
length(DDL) 문자 길이 제약 조건, String 에만 사용 255
precision, scale(DDL) BigDecimal 타입에서 사용
precision은 소수점을 포함한 전체 자리수를
scale은 소수의 자릿수이다.
double, float타입에는 적용되지 않고 아주 큰 숫자나 정밀한 소수를 다루어야 할때만 사용한다.
precision = 19,
scale = 2

@Enumerated

  • 자바 enum 타입을 매핑할 때 사용
  • 💡 !!!!주의!!!! ORDINAL 사용X
    • 예를들어 요구사항이 늘어나서 코드가 변경되어 순서가 바뀌면 DB값은 변경되지 않고 꼬여버린다.
속성 설명 기본값
value EnumType.ORDINAL: enum 순서를 데이터베이스에 저장

EnumType.STRING: enum 이름을 데이터베이스에 저장
EnumType.ORDINAL

@Temporal

  • LocalDate, LocalDateTime을 사용할 때는 생략 가능(최신 하이버네이트 지원)
    • 굳이 쓸 필요가 없어진 상황이다!!

속성 설명 기본

속성 설명 기본값
value TemporalType.DATE: 날짜, 데이터베이스 date 타입과 매핑 (예: 2013–10–11)

TemporalType.TIME: 시간, 데이터베이스 time 타입과 매핑 (예: 11:11:11)

TemporalType.TIMESTAMP: 날짜와 시간, 데이터베이 스 timestamp 타입과 매핑(예: 2013–10–11 11:11:11)
 

@Lob

  • DB에 대용량의 데이터를 저장할 필요성이 있을 경우 LOB을 사용한다.
  • 데이터베이스 BLOB, CLOB 타입과 매핑
    • @Lob에는 지정할 수 있는 속성이 없다.
    • 매핑하는 필드 타입이 문자면 CLOB 매핑, 나머지는 BLOB 매핑
      • CLOB: String, char[], java.sql.CLOB
      • BLOB: byte[], java.sql. BLOB

@Transient

  • 필드 매핑X
  • 데이터 베이스에 저장X, 조회X
  • 주로 메모리상에서만 임시로 어떤 값을 보관하고 싶을 때 사용
  • ex
    • @Transient private Integer temp;

'DB > JPA' 카테고리의 다른 글

실전 예제 - 요구사항 분석과 기본 매핑  (0) 2023.01.04
기본 키 매핑  (0) 2023.01.03
데이터 베이스 스키마 자동생성  (0) 2022.12.30
객체와 테이블 매핑  (0) 2022.12.30
준영속 상태  (0) 2022.12.30

+ Recent posts