본 포스팅은 인프러의 JPA 기본편을 수강하고 정리하는 내용입니다.
요구사항 추가
1)회원은 일반 회원과 관리자로 구분해야 한다.
2)회원 가입일과 수정일이 있어야 한다.
3)회원을 설명할 수 있는 필드가 있어야 한다. 이 필드는 길이 제 한이 없다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package hellojpa;
import javax.persistence.*;
import java.util.Date;
@Entity
public class Member {
@Id
private Long id;
@Column(name = "name")
private String username;
private Integer age;
@Enumerated(EnumType.STRING)
private RoleType roleType;
@Temporal(TemporalType.TIMESTAMP)
private Date createdDate;
@Temporal(TemporalType.TIMESTAMP)
private Date lastModifiedDate;
@Lob
private String description;
public Member() { // JPA는 객체를 생성해서 reflection을 활용하여 값을 동적으로 채워주기에 기본 생성자가 필수로 필요하다.
}
}
@Column(name = "name")
- 객체는 username 으로 쓰고 싶고 DB 필드명은 name으로 하고 싶을때 와래와 같이 설정을 지정해주면 된다.
Integer age
- Integer와 가장 비슷한 숫자 타입이 지정된다.
@Enumerated(EnumType.STRING)
- DB에는 enum 타입이 기본적으로 없기에 String값으로 저장되게 한다.
@Temporal(TemporalType.TIMESTAMP)
- 데이터베이스는 DATE, TIME, TIMESTAMP 세 가지로 구분되서 사용된다.
@Lob
- DB에 varchar를 넘어서는 큰 콘텐츠를 넣고 싶을때 사용한다.
매핑 어노테이션 정리
@Column
- insertable, updatable: 해당 컬럼이 insert되거나 update 가능 여부를 지정한다.
- unique: 제약 조건명을 지정할 수 없기에 잘 사용안한다. 운영측에서 어떤 제약조건인지 알 수 없다.
- 그래서 아래와 같이 @Table 어노테이션에 unique제약조건을 거는 경우가 많다.
1 2 3 4 5
@Entity @Table(uniqueConstraints = ) public class Member { ... }
- 그래서 아래와 같이 @Table 어노테이션에 unique제약조건을 거는 경우가 많다.
BigDecimal
: 아~주 큰 숫자나 소수점 쓸 때 사용한다.
@Enumerated
자바 enum 타입을 매핑할 때 사용한다.
- 속성: value (기본 값: EnumType.ORDINAL)
- EnumType.ORDINAL: enum 순서를 데이터베이스에 저장
(주의!!! ORDINAL 사용X)
- 운영상에서 어떤 값을 나타내는지 혼란이 올 수 있다.
- EnumType.STRING: enum 이름을 데이터베이스에 저장
- EnumType.ORDINAL: enum 순서를 데이터베이스에 저장
@Temporal
- 날짜 타입(java.util.Date, java.util.Calendar)을 매핑할 때 사용한다.
- 참고: LocalDate, LocalDateTime을 사용할 때는 생략 가능, 지금은 필요 없음(최신 하이버네이트 지원)
1
2
3
4
5
6
7
8
9
10
@Enumerated(EnumType.STRING)
private RoleType roleType;
@Temporal(TemporalType.TIMESTAMP)
private Date createdDate;
private Date lastModifiedDate;
private LocalDate testLocalDate;
private LocalDateTime testLocalDateTime;
@Lob
데이터베이스 BLOB, CLOB 타입과 매핑한다.
- @Lob에는 지정할 수 있는 속성이 없다.
- 매핑하는 필드 타입이 문자면 CLOB 매핑, 나머지는 BLOB 매핑
- CLOB: String, char[], java.sql.CLOB
- BLOB: byte[], java.sql. BLOB