반응형
아래 요구사항이 추가되었다고 가정합니다.
- 회원은 일반 회원과 관리자로 구분한다.
- 회원 가입일과 수정일이 있어야 한다.
- 회원을 설명할 수 있는 필드가 필요하다. 이 필드는 길이 제한이 없다.
요구사항에 따라 엔티티 클래스를 구성합니다.
import javax.persistence.*;
import java.util.Date;
@Entity
public class Member {
@Id
private Long id;
// DB 컬럼명 설정
@Column(name = "name")
private String name;
private int age;
@Enumerated(EnumType.STRING)
private RoleType roleType;
@Temporal(TemporalType.TIMESTAMP)
private Date createDate;
@Temporal(TemporalType.TIMESTAMP)
private Date lastModifiedDate;
// DB에 대용량의 값을 넣으려면 Lob으로 한다.
@Lob
private String description;
public Member() {
}
public Member(Long id, String name) {
this.id = id;
this.name = name;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public enum RoleType {
USER, ADMIN
}
매핑 어노테이션의 구분
- @Column: 컬럼 매핑
- @Temporal: 날짜 타입 매핑
- @Enumerated: enum 타입 매핑
- @Lob: BLOB, CLOB 매핑
- @Transient: 특정 필드 컬럼을 DB에 매핑하지 않고 서버에서만 사용하고 싶을 때 사용한다.
매핑 어노테이션의 구분 - @Column
매핑 어노테이션의 구분 - @Enumerated
enum타입 매핑시 사용됩니다.
한 가지 주의할 점은, ORDINAL 사용을 지양해야 한다는 것입니다. ORDINAL을 사용하면 의도하지 않은 순서에 의한 문제가 발생할 가능성이 높습니다.
장기적인 관점에서 STRING 으로 사용해서 관리하는 것이 좋습니다.
매핑 어노테이션의 구분 - @Temporal
날짜 타입(java.util.Date, java.util.Calendar)을 매핑할 때 사용합니다.
참고: LocalDate, LocalDateTime을 사용할 때는 생략 가능합니다.(최신 하이버네이트 환경에서 지원)
- TemporalType.DATE: 날짜, 데이터베이스 date 타입과 매핑
- ex) 2013-10-11
- TemporalType.TIME: 시간, 데이터베이스 time 타입과 매핑
- ex) 11:11:11
- TemporalType.TIMESTAMP: 날짜와 시간, 데이터베이스 timestamp 타입과 매핑
- ex) 2013-10-11 11:11:11
매핑 어노테이션의 구분 - @Lob
데이터베이스 BLOB, CLOB 타입과 매핑됩니다.
@Lob에는 저장할 수 있는 속성이 없습니다.
매핑하는 필드 타입이 문자면 CLOB 매핑, 나머지는 BLOB 매핑 입니다.
- CLOB: String, char[], java.sql.CLOB
- BLOB: byte[], java.sql.BLOB
매핑 어노테이션의 구분 - @Transient
컬럼을 매핑에서 제외하고 싶을 때 사용하는 어노테이션 입니다.
데이터베이스에 저장 및 조회되지 않습니다.
주로 메모리상에서만 임시로 어떤 값을 보관하고 싶은 경우 사용합니다.
참고
반응형
'Programming > JPA' 카테고리의 다른 글
[JPA] H2 Database 새로운 데이터베이스 생성 오류 관련 (0) | 2022.05.01 |
---|---|
[JPA] 기본 키 매핑 (0) | 2022.04.30 |
[JPA] 엔티티 매핑 (0) | 2022.04.30 |
[JPA] 영속성 컨텍스트 (0) | 2022.04.30 |
[JPA] JPA 시작! (0) | 2022.04.30 |