본문 바로가기

공부 기록/Java

[JPA] 4장 - 엔티티 매핑(2) - 필드와 컬럼 매핑

필드와 컬럼 매핑: 레퍼런스

@Column

<속성 정리>

- name : 필드와 매핑할 테이블의 컬럼 이름

- nullable : null 값의 허용 여부를 설정한다. false로 설정하면 DDL 생성 시에 not null 제약 조건이 붙는다.

- unique : 한 컬럼에 유니크 제약 조건을 걸 때 사용한다. (두 컬럼 이상을 걸 때는 @Table.uniqueConstraints를 사용한다.)

- columnDefinition : 데이터베이스 컬럼 정보를 직접 줄 수 있다.

- length : 문자 길이 제약 조건(String 타입에만 사용)

- precision, scale : 아주 큰 숫자나 정밀한 소수를 다루어야 할 때만 사용한다. BigDecimal, BigInteger 타입에서 사용하며, precision은 소수점을 포함한 전체 자릿수를, scale은 소수의 자릿수다.


@Enumerated

- 자바의 enum 타입을 매핑할 때 사용한다.

- value 속성 : EnumType.ORDINAL / STRING => 각각 enum 순서 / 이름을 데이터베이스에 저장


@Temporal

- 날짜 타입을 매핑할 때 사용한다.

- value 속성 : TemporalType.DATE / TIME / TIMESTAMP => 각각 날짜, 데이터베이스 date 타입과 매핑 / 시간, 데이터베이스 time 타입과 매핑 / 날짜와 시간, 데이터베이스 timestamp 타입과 매핑


@Lob

- 데이터베이스 BLOB, CLOB 타입과 매핑한다.

- 매핑하는 필드 타입이 문자(String, char[], java.sql.CLOB)면 CLOB으로 매핑하고 나머지(byte[], java.sql.BLOB)는 BLOB으로 매핑한다.


@Transient

- 이 필드는 매핑하지 않는다. => 데이터베이스에 저장하지 않고 조회하지도 않는다.


@Access

- JPA가 엔티티 데이터에 접근하는 방식을 지정한다.

  • AccessType.FIELD : 필드 접근 => 필드에 직접 접근한다. 필드 접근 권한이 private이어도 접근할 수 있다.
  • AccessType.PROPERTY : 프로퍼티 접근 => 접근자 사용
@Entity
public class Member {
    
    @Id // 필드 직접 접근
    private String id;
    
    @Transient
    private String firstName;
    
    @Transient
    private String lastName;
    
    @Access(AccessType.PROPERTY) // 프로퍼티 접근
    public String getFllName() {
        return firstName + lastName;
    }
    
    ...
    
}