매핑 어노테이션 정리
- @Column - 컬럼 매핑 (엔티티와 디비에서의 컬럼이 다를 경우)
- 세부 속성 정리
- name : 필드와 매핑할 테이블의 컬럼 이름
- insertable, updatable : 등록, 변경 가능 여부 / 기본 값 : True
- nullable(DDL) : null 값의 허용 여부를 설정한다. false로 설정하면 DDL 생성시에 not null 제약조건이 붙는다.
- unique(DDL) : @Table의 uniqueConstraints와 같지만 컬럼에 간단히 유니크 제약조건을 걸 때 사용
- 복합으로는 사용할 수 없다
- 컬럼 명 자체에 거는 것은 사용하지 않는다.
// 잘못된 예시 @Entity public class Member { @Id private Long id; // username 컬럼 자체에 제약조건을 거는 방법은 사용하지 말자 @Column(name = "name", unique = false) private String username;
// 올바른 방법 @Entity // @Table 어노테이션을 통해 테이블 자체에 제약조건을 걸면, 이름도 따로 명시해줄 수 있다. @Table(uniqueConstraints = ) public class Member { @Id private Long id; @Column(name = "name") private String username;
- columnDefinition : 데이터베이스 컬럼 정보를 직접 줄 수 있다.
- ex) @Column (name = "name", columnDefinition = "varchar(100) default 'EMPTY')
- precision, scale : 아주 큰 숫자 형태의 컬럼에서 사용할 수 있다.
- 세부 속성 정리
- @Temporal - 날짜 타입 매핑 (옛날 버전일 경우 사용)
- 최신버전이라면 LocalDate, LocalDateTime을 사용하면 된다.
- LocalDate를 사용하면 JPA가 알아서 Date로, LocalDateTime을 사용하면 timestamp로 바꿔준다.
// 옛날 버전에서 사용 // @Temporal(TemporalType.TIMESTAMP) // private Date createdDate; // // @Temporal(TemporalType.TIMESTAMP) // private Date lastModifiedDate; // 아래처럼 사용하자 private LocalDate testLocalDate; private LocalDateTime testLocalDateTime; /* 실행 결과 create table Member ( id bigint not null, age integer, createdDate timestamp, description clob, lastModifiedDate timestamp, roleType varchar(255), // 날짜형 바꿔준 부분 testLocalDate date, testLocalDateTime timestamp, name varchar(255), */
- @Enumerated - enum 타입을 매핑할 때 사용
- DEFAULT 값이 EnumType.ORDINAL 옵션인데 ORDINAL은 순서문제가 있으므로 사용하지 않는다
// 반드시 EnumType에는 STRING 타입으로 명시해준다. @Enumerated(EnumType.STRING)
- DEFAULT 값이 EnumType.ORDINAL 옵션인데 ORDINAL은 순서문제가 있으므로 사용하지 않는다
- @Lob - BLOB, CLOB 매핑
- Lob에는 지정할 수 있는 속성이 없다.
- 매핑하는 필드 타입이 문자면 CLOB 매핑, 나머지는 BLOB 매핑
- @Transient - DB랑은 관계없이 메모리에서만 계산하고 싶을 때 사용
- 연관관계를 짓고싶지 않을 경우 (메모리에 임시로 계산하고 싶을 경우 사용)
- ex) 캐시
'Dev > JPA' 카테고리의 다른 글
RS) 실전예제를 통한 문제점 분석 (0) | 2022.02.06 |
---|---|
RS) 기본키 매핑 (0) | 2022.02.03 |
RS) 객체 테이블 매핑 (0) | 2022.02.02 |
RS) 준영속 상태 (0) | 2022.02.01 |
RS) 플러시(flush) (0) | 2022.02.01 |