on
[JPA] 필드와 컬럼 매핑
[JPA] 필드와 컬럼 매핑
필드와 컬럼 매핑
객체의 필드와 데이터베이스의 컬럼을 매핑하는 방법에 대해 알아보겠다.
1. @Column
객체필드를 테이블 컬럼에 매핑한다
주요 속성들
- name = String
-> 테이블 컬럼에 매핑될때의 이름을 정의한다.
- nullable = boolean
-> null값 허용 여부를 선택한다
- unique = boolean
-> 한 컬럼에 유니크 제약조건을 걸때 사용한다.
- length = int
-> String값에만 사용하며, 최대 길이를 설정한다.
예시
@Entity @Table(name = "USER") public class User extends CommonDate{ @Id @GeneratedValue @Column(name = "ID") private Long id; @Column(name = "USER_NAME", nullable = false, unique = true) private String userName; @Column(name = "CONTRIBUTION_COUNT", nullable = false) private long contributionCount; @Column(name = "RANK", nullable = false) private long rank; public User(){} }
2. @Enumerated
자바의 enum타입을 객체에 저장한다.
속성
- EnumType.STRING : enum 이름을 저장
- EnumType.ORDINAL : enum 순서를 저장
예시
@Enumerated(EnumType.STRING) private TestEnum testEnum;
3. @Temporal (Column을 사용한다)
자바의 java.util.Date나 java.util.Calendar을 저장할때 사용한다.
하지만, 자바의 java.util.Date api는 문제점이 많아서 사용을 지양해야하는데, 자세한 이유는 아래 링크를 보자.
https://d2.naver.com/helloworld/645609
따라서, 최근엔, java.time의 LocalDate와 LocalDateTime을 주로 사용하며, 컬럼 매핑또한 @Column으로 하는걸 지향하는 편이다.
@Column으로 필드를 매핑 해도 DB에는 date타입으로 저장된다.,
예시)
@MappedSuperclass public class CommonDate{ @Column(name = "LAST_MODIFIED_DATE") private LocalDate lastModifiedDate; public LocalDate getLastModifiedDate(){ return this.lastModifiedDate; } public void setLastModifiedDate(LocalDate lastModifiedDate){ this.lastModifiedDate = lastModifiedDate; } }
4. @Lob
데이터베이스 BLOB, CLOB타입과 매핑한다. CLOB과 BLOB은 각각은 매우 긴 문자열이나, 이미지, mp3등등 구조화되지않은 매우 큰 데이터를 저장한다.
(Lob에 저장할 수 있는 데이터 최대치는 컴퓨터 용량의 크기라고 한다.)
@Lob private String lobString; @Lob private byte[] lobByte;
5. @Transient
@Transient어노테이션이 있는 필드는 매핑하지 않는다.
@Transient private String transientString;
6. @Access
JPA가 Entity클래스 필드에 접근하는 방식을 지정한다.
속성
- AccessType.FIELD : 필드에 직접 접근한다. 필드 선언이 private이여도 접근 가능하다.
- AccessType.PROPERTY : getter와 setter를 이용해 접근한다.
@Access를 설정하지 않으면, @Id의 위치를 기준으로 접근 방식이 결정된다.
예시)
@Entity @Table(name = "ACCESS_CLASS") @Access(AccessType.PROPERTY) public class AccessClass{ /.../ @Id public String getId(){ return this.id; } @Column public String getDate(){ return this.date; } }
from http://dlwnsdud205.tistory.com/273 by ccl(A) rewrite - 2021-10-12 21:01:46