엔티티 매핑
- 객체와 테이블 매핑 : @Entity, @Table
- 필드와 컬럼 매핑 : @Column
- 기본 키 매핑 : @Id
- 연관관계 매핑 : @ManyToOne, @JoinColumn
1. 객체와 테이블 매핑 (@Entity, @Table)
1-1. @Entity
: @Entity 가 붙은 클래스는 JPA가 관리하는 객체이다. 붙지않으면 JPA와 관련없는 클래스
: 엔티티가 매핑된 것들을 자동으로 테이블을 만들어낸다.
@Entity
public class Member {
@Id
private Long id;
private String name;
private int age;
}
- 주의할 점
- 기본 생성자 필수 (파라미터가 없는 public, protected 생성자)
- 저장할 필드에 final 사용하면 됨
- 속성 : name (잘 쓰진 않음)
@Entity(name = "Member")
public class Member {
}
1-2. @Table
: 엔티티와 매핑할 테이블 지정
- 속성
name : 테이블명을 지정하고 싶을때
@Entity
@Table(name = "MBR")
public class Member {
}
2. 필드와 컬럼 매핑 : @Column
@Entity
public class Member {
@Id
private Long id;
@Column(name="USERNAME", unique=true, length=10)
private String name;
private Integer age; //DB에도 숫자타입
//객체에서 enum 타입을 쓸때
@Enumerated(EnumType.STRING)
private RoleType roleType;
@Temporal(TemporalType.TIMESTAMP)
private Date lastModifiedDate;
//varchar 보다 큰 크기
@Lob
private String description; // @Lob + 문자열이면 'clob' 이름으로 매핑이 됨
}
- 속성
- name="USERNAME" : DB의 데이터 컬럼명을 바꾸고싶을 때
- unique=true : 유니크 제약조건. DDL 생성, (DB에만 영향을 주고 JPA 실행 로직에는 영향 X)
- @Column 안에서 잘 쓰지않고 클래스에서 @Table(uniqueConstraints="") 이 방식을 더 선호
- length=10 : 문자 길이 제약조건
- nullable = true/false : null 값 허용 여부
- insertable , updatable : 등록, 변경 가능여부
- ex) updatable=false 하면 업데이트를 해도 DB에 반영되지 않음
- precision , sacle : 아주 큰 숫자나 소수점 쓸 때
enum 타입
@Enumerated
객체에서 enum 타입을 쓴다면 DB에는 enum 타입이 없기때문에 @Enumerated 어노테이션을 쓴다.
public enum RoleType {
USER, ADMIN
}
@Enumerated(EnumType.STRING)
private RoleType roleType;
- 주의사항
기본이 ORDINAL 인데 사용하지 않는다
> EnumType.ORDINAL : enum 순서를 DB에 저장 (숫자 타입으로 DB에 저장이 된다. 0,1,2,3...)
현재 enum 타입을 쓰는 객체 USER, ADMIN 은 각 0번, 1번 순서
쓰면 안되는 이유
enum 타입을 쓰는 객체 GUEST를 추가했을때 GUEST도 0번째가 되어버려서
USER도 0번 순서, GUEST도 0번 순서로 겹쳐버리기 때문에 필수로 EnumType.STRING 를 사용한다.
public enum RoleType {
GUEST, USER, ADMIN
}
그렇기 때문에 문자타입인 EnumType.STRING을 쓴다면 GUEST, USER, ADMIN 구분이 쉽게 된다.
날짜 타입
@Temporal
@Temporal(TemporalType.TIMESTAMP)
private Date lastModifiedDate;
- DATE : 날짜
- TIME : 시간
- TIMESTAMP : 날짜,시간
* DB와 관련없이 메모리에만 객체를 쓰고싶다 > @Transient
* 최신버전은 LocalDate createDate : 년월 / LocalDateTime : 년월시간
기본키 매핑은 다음 글...
'공부' 카테고리의 다른 글
연관관계 | 단방향, 양방향, 연관관계의 주인 (0) | 2023.10.24 |
---|---|
엔티티 매핑 (2) | @Id 기본 키 매핑 (0) | 2023.09.22 |
JPA (3) 영속성 컨텍스트 | 생명주기(영속,비영속,준영속),이점(1차캐시,더티체킹,동일성) (0) | 2023.09.21 |
JPA (2) | JPA 구동방식 설명 (0) | 2023.09.20 |
JPA (1) | 자바 컬렉션과 JPA의 등장배경, JPA 장점 (0) | 2023.09.08 |