- 요구사항 추가
- 회원은 일반 회원과 관리자로 구분해야 한다
- 회원 가입일과 수정일이 있어야 한다
- 회원을 설명할 수 있는 필드가 있어야 한다. 이 필드는 길이 제한이 없다
@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() {
}
}
public enum RoleType {
USER, ADMIN
}
- ENUM
- JPA, 객체에서 ENUM 타입을 사용하고 싶은데 DB에는 ENUM타입이 없다
- 그럴때 Enumerated 를 사용해주면 사용할 수 있고
- DATE
- 날짜를 사용할때에는 Temporal를 사용하는데 TemporalType을 까보면 enum 구조다
public enum TemporalType { DATE, //날짜 TIME, //시간 TIMESTAMP //날짜, 시간 둘 다 포함 }
- Lob
- Varchar2를 넘어서는 큰 용량을 사용하고 싶을때 사용
- Transient
- 컬럼을 DB에 적용하지 않음, 메모리에서만 사용
- 계산용이나 사용자 설정으로 사용함
@Transient private int temp;
- @Column
- name
필드와 매핑할 테이블의 컬럼 이름@Column(name = "name") private String username;
- insertable , updatable
컬럼 내용의 등록, 변경 여부를 결정한다@Column(updatable = false) private String username;
- nullable
null 값의 허용 어부를 설정한다. false로 설정하면 DDL 생성 시에 not null 제약조건이 붙는다@Column(nullable = false) private String username;
- unique
@Table의 uniqueConstraints와 같지만 한 컬럼에 간단히 유니크 제약조건을 걸 때 사용한다@Column(unique = true) private String username;
- columnDefinition
데이터베이스 컬럼 정보를 직접 줄 수 있다@Column(columnDefinition = "varchar(100) default 'EMPTY'" private String username;
- 길이만 적용할 경우 length를 사용한다
- 선호하는 방법은 아니다
- 기본 값은 TRUE이고, false 일 경우 update문 사용이 불가능하다
- enum 타입을 매핑할 때 주의 사항
@Enumerated(EnumType.ORDINAL)
private RoleType roleType;
@Enumerated(EnumType.STRING)
private RoleType roleType;
ENUM 타입으로 매핑해줄 때 2가지 방벙으로 매핑할 수 있다
- STRING 타입은 이름으로 관리하여 매핑한다
- ORDINAL 타입은 ENUM 순서로 관리한다
만약 개발중에 설정해 놓은 ENUM을 변경해야 할때 순서가 바뀌게 되면 오류가 발생한다
그러므로 ORDINAL 개발보다 STRING 개발을 선호한다
기본 값은 ORDINAL로 되어있으니 STRING을 추가하는 것이 좋다
이 글은 김영한님의 JPA 기본편을 정리한 글입니다.
'프레임워크 > JPA' 카테고리의 다른 글
[JPA] 객체지향에서의 단방향 설정 (0) | 2022.03.16 |
---|---|
[JPA] 엔티티와 매핑 (0) | 2022.03.14 |
[JPA] JPQL (Java Persistence Query Language)이란? (0) | 2022.02.25 |
[JPA] JPA 영속성 컨텍스트 (0) | 2022.02.23 |
[JPA] JPA CRUD 기본 동작 (0) | 2022.02.23 |
댓글