필드와 칼럼 매핑
요구사항
회원은 일반 회원과 관리자로 구분해야한다. Java : enum 타입 DB : @Enumerated
회원가입일과 수정일이 있어야한다. Java : Date 타입 DB : @Temporal
회원을 설명할 수 있는 필드가 있어야한다. 이 필드는길이 제한이 없다. Java : String 타입 DB : @Lob(String인 경우는 clob)
애노테이션
설명
@Column
컬럼 매핑
@Temporal
날짜 타입 매핑
@Enumerated
enum 타입 매핑
@Lob
BLOB, CLOB 매핑
@Transient
특정 필드를 칼럼에 매핑하지 않을 때(매핑 무시)
주로 메모리상에서만 임시로 어떤 값을 보관하고 싶을 때
ex)@Transient private int tmp;
@Column
nullable = false : not null 제약 조건(자주 쓰임) unique = true : 유일무이한 이름이 할당되는데 랜덤으로 이름이 정해지므로 실제 사용하기 어렵다. precision, scale(DDL) : 아주 큰 숫자(BigDecimal 타입 또는 BigInteger)나 소숫점에 사용한다.
2. @Enumerated
ORDINAL(기본값) : 사용❌
STRING
3. @Temporal
LocalDate 타입 : 년,월. DB에서 date타입
LocalDateTime 타입 : 년,월,일. DB에서 timestamp 타입 ex) TemporalType.DATE : 날짜. DB의 date 타입과 매핑. 2013-10-11 TemporalType.TIME : 시간. DB time 타입과 매핑. 11:11:11 TemeporalType.TIMESTAMP : 날짜&시간. DB Timestamp 타입과 매핑. 2013-10-11 11:11:11
4. @Lob
VarChar를 넘어서 더 큰 것을 쓰고 싶을 때. @Lob에는 지정할 수 있는 속성이 없다. 매핑하는 필드 타입이 문자면 CLOB 매핑, 나머지는 BLOB 매핑
CLOB: String, char[], java.sql.CLOB
BLOB: byte[], java.sql. BLOB
package hellojpa;
import jdk.nashorn.internal.objects.annotations.Getter;
import jdk.nashorn.internal.objects.annotations.Setter;
import javax.persistence.*;
import java.util.Date;
@Entity//JPA가 로딩될 때 엔티티로 인식한다!
@Getter @Setter
//@Table(uniqueConstraints = )
public class Member {
@Id//PK
private Long id;
@Column(name = "name",nullable = false)
private String username;
private Integer age;
//DB에 자바의 enum을 쓰고 싶다면 @Enumerated를 쓰면 된다!
@Enumerated(EnumType.STRING)
private RoleType roleType;
//Date 타입 = 날짜, 시간, 타임스탬프(날짜+시간)
@Temporal(TemporalType.TIMESTAMP)
private Date createdDate;
@Temporal(TemporalType.TIMESTAMP)
private Date lastModifiedDate;
@Lob//VARCHAR를 넘어서는 큰 것을 쓰고 싶을 때 사용, String이면 DB에서 clob으로 타입 생성!
private String description;
//JPA는 리플렉션해야해서 동적으로 객체 생성해야하기 때문에 기본 생성자 있어야 한다!
public Member() {
}
}
Last updated
Was this helpful?