필드와 컬럼 매핑
- @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 |
@Table 의 uniqueConstraints 와 같으나 한 컬럼에 간단히 유니크 제약조건을 걸 때 사용한다. |
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 |