반응형
객체와 테이블 매핑
@Entity
@Entity가 붙은 클래스를 엔티티라고 하고 JPA가 관리 한다.
JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수이다.
속성 값
속성 | 설명 | 기본값 |
name | JPA에서 사용할 엔티티 이름을 지정한다 | 클래스 이름을 그대로 사용 |
주의할점
- 기본 생성자 필수이다. (파라미터가 없는 public 또는 protected 생성자)
- final, enum, interface, inner 클래스에서는 사용할 수 없다.
- 저장할 필드의 변수에 final을 사용할 수 없다.
@Table
엔티티와 매핑할 테이블 지정한다.
속성 값
속성 | 설명 | 기본값 |
name | 매핑할 테이블 이름을 지정한다 | 엔티티 이름 사용 |
catalog | catalog 기능이 있는 DB에서 catalog를 매핑한다. | |
schema | schema 기능이 있는 DB에서 schema를 매핑한다. | |
uniqueContraints | DDL 생성시 유니크 제약조건을 생성한다. 2개 이상의 복합 유니크 제약조건도 만들 수 있다. (스키마 자동 생성 기능 ddl-auto를 사용해서 DDL을 만들 때만 사용) |
필드와 컬럼 매핑
@Colum
DB의 컬럼과 엔티티 클래스의 필드를 매핑할 때 사용한다.
속성 값
속성 | 설명 | 기본값 |
name | 필드와 매핑할 테이블의 컬럼 이름 | 객체의 필드 이름 |
insertable | 엔티티 저장시 해당 필드도 같이 저장한다. false로 설정 시 DB에 저장하지 않는다. |
TRUE |
updatable | 엔티티 수정시 해당 필드도 같이 수정한다. false로 설정 시 DB에 업데이트 하지 않는다. |
TRUE |
nullable(DDL) | null 값의 허용 여부를 설정한다. false로 설정하면 DDL 생성 시에 not null 제약조건이 붙는다. |
TRUE |
unique(DDL) | 한 컬럼에 간단히 유니크 제약조건을 걸 때 사용. 보통은 유니크 명이 랜덤으로 나와서 식별하기 어렵기 때문에 Table의 @UniqueConstraint 어노테이션을 대신 쓴다. |
|
columnDefinition (DDL) | DB의 컬럼 정보를 직접설정 한다. ex) varchar(100) default 'EMPTY' |
필드의 자바 타입과 방언 정보를 사용 |
length(DDL) | 문자 길이 제약조건, String 타입에만 사용 | 255 |
precision, scale(DDL) | BigDecimal 타입이나 BigInteger에서 사용. precision = 소수점을 포함한 전체 자릿수 scale = 소수의 자릿수 ( double, float 타입에는 적용되지 않는다. ) 정밀한 소수를 다루어야 할 때만 사용한다. |
precision=19, scale=2 |
@Enumerated
자바의 enum 타입을 매핑할 때 사용한다.
속성 값
속성 | 설명 | 기본값 |
value | • EnumType.ORDINAL: enum에 정의된 순서대로 0부터 DB에 숫자를 저장 • EnumType.STRING: enum의 타입을 문자열로 DB에 저장 |
EnumType.ORDINAL |
EnumType.STRING을 사용하는것을 권장
EnumType.ORDINAL은 중간에 enum 타입이 추가되면 순서 변경의 위험이 있다.
반면에, EnumType.STRING은 ORDINAL에 비해 중간에 순서가 변경되거나 추가되도 안전하다.
@Lob
DB의 BLOB, CLOB 타입과 매핑한다.
@Lob에는 지정할 수 있는 속성이 따로 없다.
대신 매핑하는 필드 타입이 문자면 CLOB이고, 나머지는 BLOB으로 매핑된다.
- CLOB : 문자 대형 객체.
- BLOB : 이진 대형 객체. 이미지, 동영상, MP3 등...
@Transient
특정 필드를 컬럼에 매핑하지 않는다. (매핑 무시)
매핑하지 않으므로 데이터베이스에 저장하지 않고, 조회 또한 할 수 없다.
주로 메모리상에서만 임시로 값을 보관하고 싶을 때 사용한다.
@Temporal
자바 8부터 LocalDate, LocalDateTime을 사용할 수 있게 되면서
@Temporal을 생략하여도 필드의 타입이 LocalDate, LocalDateTime일 때 알아서 시간정보를 매핑해준다.
'◼ JPA' 카테고리의 다른 글
[JPA] 연관관계 매핑 주인에 대해서 (mappedBy) (0) | 2023.06.06 |
---|---|
[JPA] 기본 키 매핑 (기본키 자동 생성 전략) (0) | 2023.06.05 |
[JPA] 데이터베이스 초기화 전략 (ddl auto 옵션) (0) | 2023.06.04 |
[JPA] dialect란? (0) | 2023.06.04 |
[JPA] 내부 동작 방식 (feat. 영속성 컨텍스트란?) (0) | 2023.06.02 |