[JPA] 필드와 컬럼 매핑

hi·2022년 9월 24일
객체와 테이블 매핑@Entity , @Table
필드와 컬럼 매핑@Column
기본 키 매핑@Id
연관관계 매핑@ManyToOne , @JoinColumn

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

@Column

속성

name
필드와 매핑할 테이블의 컬럼명
기본값 - 객체의 필드 이름

  • 스프링부트에서는 필드명을 camelcase -> 언더스코어로 자동 변환

insertable , updatable
등록, 변경 가능 여부
기본값 - TRUE

nullable(DDL)
null 값의 허용 여부 설정
false는 DDL 생성 시에 not null 제약조건이 붙음

unique(DDL)
@Table의 uniqueConstraints와 같지만 한 컬럼에 간단히 유니크 제약조건을 걸 때 사용

columnDefinition (DDL)
DB 컬럼 정보를 직접 설정
ex) varchar(100) default ‘EMPTY'

length(DDL)
문자 길이 제약조건, String 타입에만 사용
기본값 - 255

  • 명시해두면 좋다

precision, scale(DDL)
BigDecimal 타입에서 사용 (BigInteger도 사용 가능)
precision은 소수점을 포함한 전체 자릿수, scale은 소수의 자릿수
(double, float 타입은 적용 X)
아주 큰 숫자나 정밀한 소수를 다루어야 할 때만 사용)
기본값 - precision=19, scale=2

@Temporal

날짜 타입(java.util.Date, java.util.Calendar)을 매핑할 때 사용
LocalDate, LocalDateTime을 사용할 때는 생략 가능 (최신 hibernate 지원)

속성 value

TemporalType.DATE : 날짜, 데이터베이스 date 타입과 매핑
ex. 2013–10–11

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

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

@Enumerated

자바 enum 타입 매핑시 사용

속성 value

EnumType.ORDINAL : enum 순서를 데이터베이스에 저장 (기본값)
EnumType.STRING : enum 이름을 데이터베이스에 저장

  • 새로운 값이 추가될 때 값이 중복되기 때문에 ORDINAL 사용 X

@Lob

데이터베이스 BLOB, CLOB 타입과 매핑

지정할 수 있는 속성이 없다
매핑하는 필드 타입이 문자면 CLOB 매핑, 나머지는 BLOB 매핑됨

  • CLOB : String, char[], java.sql.CLOB
  • BLOB : byte[], java.sql. BLOB

0개의 댓글