필드와 컬럼 매핑

  • @Column : 컬럼을 매핑
  • @Enumerated : Enum 타입을 매핑
  • @Temporal : 날짜 타입을 매핑
  • @Lob : BLOB, CLOB 등의 길이 제한이 없는 문자열 타입을 매핑
  • @Transient : 해당 필드를 매핑하지 않음을 지정
  • @Access : JPA가 엔티티에 접근하는 방식 설정

@Column

속성 기능 기본값
name 필드와 매핑할 테이블의 컬럼 이름을 지정한다. 객체의 필드 이름
insertable 엔티티 저장 시 이 필드도 같이 저장한다.
false로 설정하면 이 필드는 데이터베이스에 저장하지 않는다.
false 옵션은 읽기 전용일 때 사용한다.
true
updateable 엔티티 수정 시 이 필드도 같이 수정한다.
false로 설정하면 데이터베이스에 수정하지 않는다.
false 옵션은 읽기 전용일 때 사용한다.
true
table 하나의 엔티티를 두 개 이상의 테이블에 매핑할 때 사용한다.
(@SecondaryTable 사용) 지정한 필드를
다른 테이블에 매핑할 수 있다.
현재 클래스가 매핑된 테이블
nullable DDL 생성 시 null 값의 허용 여부를 설정한다.
false로 설정하면 not null 제약조건이 붙는다.
true
unique @TableuniqueConstraints와 같으나
한 컬럼에 간단히 유니크 제약조건을 걸 때 사용한다.
false
columnDefinition 데이터베이스 컬럼 정보를 직접 줄 수 있다.
자바 필드의 타입과, 데이터베이스 방언 설정 정보를 사용한다.
자바 필드의 타입
데이터베이스 방언 설정 정보
length 문자 길이 제약조건, String 타입에만 사용한다. 255
precision BigDecimal 타입(혹은 BigInteger)에서 사용한다.
precision은 소수점을 포함한 전체 자리수이다
0
scale BigDecimal 타입(혹은 BigInteger)에서 사용한다.
scale은 소수의 자리수
0

 

// nullable
@Column(nullable = false)
private String data;

SQL : data varchar(255) not null

// unique
@Column(unique = true)
private String userName;

SQL : alter table tablename add constraint UK_xxx unique (username)

// columnDefinition
@Column(columnDefinition = "varchar(100) default 'test'")
private String data;

SQL : data varchar(100) default 'test'

// length
@Column(length = 200)
private String data;

SQL : data varchar(100)

@Enumnerated

속성명 기능 기본값
EnumType.ORDINAL enum의 순서대로 데이터베이스에 저장합니다. 순서 값(0, 1, 2, ...)으로 저장 기본값
EnumType.STRING enum 이름을 문자열로 데이터베이스에 저장한다.
예를 들어, RED, GREEN, BLUE 등으로 저장됨
이거나
// Enum 선언
public enum RoleType{
    ADMIN, USER
}

// 이름으로 매핑
@Enumerated(EnumType.STRING)
private RoleType roleType;

// 순서로 매핑
@Enumerated(EnumType.ORDINAL)
private RoleType roleType;

@Temporal

날짜 타입에 대한 매핑
속성명 기능 기본값
value -TemporalType.DATE: 날짜를 데이터베이스 DATE 타입과 매핑 기본값
* TemporalType.TIME : 시간을 데이터베이스 time 타입과 매핑
* TemporalType.TIMESTAMP : 날짜 + 시간을 데이터베이스 timestamp 타입과 매핑
// DATE
@Temporal(TemporalType.DATE)
private Date date;
예 : 2023-10-25

// TIME
@Temporal(TemporalType.TIME)
private Date time;
예 : 00:00:00

// TIMESTAMP
@Temporal(TemporalType.TIMESTAMP)
private Date timeStamp;
예 : 2023-10-25 00:00:00:00

@Lob

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

해당 어노테이션은 따로 지정할 수 있는 속성이 없다.
매핑하는 필드가 문자열이라면 CLOB으로 매핑하고 그렇지 않다면 BLOB으로 매핑한다.

여기서 잠시 CLOB과 BLOB에 대해 간단히 설명하고 넘어가자.

CLOB(Character Large Object) 

문자 기반의 큰 객체를 나타내며, 주로 텍스트 데이터를 저장하는데 사용된다.
BLOB(Binary Large Object) 
이진 데이터를 저장하는데 사용되며
주로 이미지, 오디오, 비디오, 바이너리 데이터 등을 저장하는데 사용된다.

자바의 자료형으로 분류하면 다음과 같다.

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

@Transient

  • 해당 필드는 매핑하는 것을 희망하지 않을 경우 사용한다.
  • 저장 및 조회도 하지 않기 때문에 임시로 어떤 값을 보관하고 싶을 때 활용하기도 한다.

@Access

AccessType.FIELD

  • 필드에 직접 접근하며 private로 선언하였더라도 접근이 가능하다.
  • @Id가 필드에 있는 경우 해당 접근 방식은 생략 가능하다.
@Entity
public class Test{
    @Id @GeneratValue // @Id 어노테이션이 필드에 있는 상태
    private Long id;
}
AccessType.PROPERTY : 접근자(getter, setter)를 통해서 접근이 가능하다. @Id가 프로퍼티에 있는 경우 해당 접근 방식은 생략 가능하다.
@Entity
public class Test{
    @GeneratValue
    private Long id;
    ...
    @Id // @Id 어노테이션이 프로퍼티에 있는 상태
    public Long getId(){
    }
}

'CS > SPRING' 카테고리의 다른 글

JPA 기본키 매핑  (0) 2024.08.12
데이터베이스 스키마 자동 생성  (0) 2024.08.12
JPQL과 SQL의 차이점  (0) 2024.08.12
JPA의 영속성 컨텍스트  (0) 2024.08.12
JPA를 사용한 간단한 CRUD 구현  (0) 2024.08.12

+ Recent posts