⚡ 생각대로 살지 않으면 사는대로 생각한다.
⚡ 나는 어차피 잘 될 놈이다. 이미 잘 되고 있고, 계속해서 잘 되고 있다.
hibernate.hbm2ddl.auto
어노테이션 | 설명 |
---|---|
@Column | 컬럼 매핑 |
Temporal | 날짜 타입 매핑 |
@Eumberated | enum 타입 매핑 기본적으로 DB에는 enum타입이 없다. 그래서 자바의 enum타입과 매핑해주기 위해서 사용. DB의 varchar 와 매핑된다. |
@Lob | BLOB, CLOB 매핑 |
@Transient | 특정 필드를 컬럼에 매핑하지 않음(매핑 무시) |
속성 | 설명 | 기본값 |
---|---|---|
name | 필드와 매핑할 테이블의 컬럼 이름 | 객체의 필드 이름 |
insertable | 등록 가능 여부 | TRUE |
updatable | 변경 가능 여부 | TRUE |
nullable(DDL) | null 값의 허용 여부를 설정한다. false로 설정하면 DDL 생성 시에 not null 제약조건이 붙는다. | |
unique(DDL) | @Table(클래스레벨에 주는 애너테이션)의 uniqueConstraints와 같지만 한 컬럼에 간단히 유니크 제약조건을 걸 때 사용한다. 잘 사용하지 않는다. (아래 사진 참고) | |
columnDefinition(DDL) | 데이터베이스 컬럼 정보를 직접 줄 수 있다. ex) varchar(100) default 'EMPTY' | 필드의 자바 타입과 방언 정보를 사용 아래 사진 참고 |
length(DDL) | 문자 길이 제약조건, String 타입에만 사용한다 | 255 |
precision, scale(DDL) | BigDecimal 타입에서 사용한다(Biginteger도 사용할 수 있다). precision은 소수점을 포함한 전체 자릿수를, scale은 소수의 자릿수다. 참고로 double, float타입에는 적용되지 않는다. 아주 큰 숫자나 정밀한 소수를 다루어야할 때만 사용한다. | precision = 19, scale=2 |
unique(DDL)을 잘 사용하지 않는 이유
unique를 true로 주게 되면, 실행시 나오는 것처럼 이름으로 구분하기 어렵다. 그래서 영한좌는 컬럼보다는 클래스레벨에서**@Table(uniqueConstraints = 제약조건)**
이런 식으로 사용하라고 권한다.
columnDefinition(DDL) : 컬럼 정보 직접 주기
이처럼 컬럼 정보를 직접 준 내용을 SQL로그를 통해서 확인할 수 있다.
❗자바 enum 타입을 매핑할 때 사용
주의❗ ORDINAL 사용 X
속성 | 설명 | 기본값 |
---|---|---|
value | EnumType.ORDINAL: enum 순서를 데이터베이스에 저장 EnumType.STRING: enum 이름을 데이터베이스에 저장 ORDINAL로 값을 주면 안됨. 위험하다.(아래 사진 참고) | EnumType.ORDINAL |
@Enumertated에 ORDINAL(기본값)을 주면 안 되는 이유
권한 타입의 Enum으로 USER, ADMIN이 있는 상태에서 두 Member 인스턴스를 생성하고, 각각에 USER, ADMIN을 주었다.
위와 같은 코드가 있고, H2에서 확인한 결과
이 상태에서 RoleType의 enum에 GUEST를 추가하고, 새로운 멤버에 GUEST 권한을 주었다.
GUSET와 USER로 등록한 RoleType이 다 0으로 되있는 걸 볼 수 있다.
순서가 지금 바꼈다... 운영상에서는 치명적이라고 하는데, 이처럼 enum타입에 ORDINAL을 사용하면 굉장히 위험하다.
그래서 그냥.. STRING을 필수적으로 사용해주면 된다.STRING으로 한 결과
STRING으로 하자!!
옛날에 쓰신 분들이 필요...지금은 잘 안 씀..;;
LocalDate
(년월), LocalDateTime
(년월일) 이 두개 중 하나 쓰면 됨. 속성 | 설명 | 기본값 |
---|---|---|
value | TemporalType.DATE : 날짜, 데이터베이스 date 타입과 매핑(예: 2013-10-11) TemporalType.TIME : 시간, 데이터베이스 time 타입과 매핑(예: 11:11:11) TemporalType.TIMESTAMP: 날짜와 시간, 데이터베이스 timestamp 타입과 매핑(예: 2013-10-11 11:11:11) |
데이터베이스 BLOB, CLOB 타입과 매핑
varchar
의 크기를 넘어서는 데이터매핑하기 싫을 때..
@Transient
private Integer temp;
-끝-