본문 바로가기
JPA/JPA원리

7 JPA 필드와 칼럼 매핑

by 킹차니 2021. 7. 4.
김영한님의 인프런 강의와 PDF를 바탕으로 정리하였습니다.
https://www.inflearn.com/courses?s=%EA%B9%80%EC%98%81%ED%95%9C

 

아래와 같은 요구사항을 만족하는 모델을 설계해보겠습니다.

 

1. 회원은 일반 회원과 관리자로 구분해야 한다.

2. 회원 가입일과 수정일이 있어야한다.

3. 회원을 설명할 수 있는 필드가 있어야 한다. 이 필드는 길이 제한이 없다.

 

일단 위의 1번 요구사항을 위한 회원타입 enum을 만듭니다.

 

2번, 3번 요구사항을 위해 아래와 같이 필드를 추가하고, 객체와 테이블을 매핑을 해줘야 합니다.

 

매핑 어노테이션은 아래와 같이 몇가지가 있습니다.

 

 

이제 각각의 매핑 어노테이션을 하나씩 알아보겠습니다.

 

🔑 @Column

@Column은 객체의 필드와 DB테이블의 칼럼을 매핑합니다.

@Column에는 아래의 표처럼 다양한 속성들이 있습니다.

 

 

🔑 @Temporal

@Temporal은 날짜 타입 (java.util.Date, java.util.Calendar)을 매핑하기 위해 사용됩다.

참고로 LocalDate, LocalDateTim  를 사용 할 때는 생략이 가능합니다.

 

 

 

🔑 @Enumerated

@Enumerated는 DB에는 없는 자바의 enum타입을 매핑하기 위해 사용됩니다. 되도록이면 ORDINAL은 사용하지 않는 것이 좋습니다.

회원타입을 위해 만든 enum타입을 위해 사용합니다. 

 

 

 

🔑 @Lob

DB의 BLOB, CLOB과 매핑합니다. 필드가 문자면 CLOB, 나머지는 BLOB으로 매핑됩니다.

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

 

 

 

 

🔑 @Transient

@Transient는 DB와 필드 매핑되지 않는, 즉 DB와 상관이 없는 필드임을 알리기 위해 사용됩니다. 메모리상에서만 관리되는 필드일 때 사용합니다.

 

 

이제 실행을 해보면 아래와 같은 create 쿼리가 날라갑니다. (ddl.auto를 create로 설정)

Member 엔티티 클래스에서 매핑한 대로 날라가는 것을 볼 수 있습니다.