[JPA] - 엔티티 맵핑Dev/JPA2024. 7. 3. 00:04
Table of Contents
- 기본 애노테이션
- @Entity : 엔티티클래스에 설정,필수
- @Table : 맵핑할 테이블 지정
- @Id : 식별자 속성에 설정, 필수
- @Column : 맵핑할 컬럼명 지정
- 지정하지 않으면 필드명/프로퍼티 사용
- @Enumerated : enum타입 맵핑할때 설정
- @Temporal : java.util.Data, java.utilCalendar 맵핑
- 자바8 시간/날짜 타입 등장 이후로 거의 안씀
- @Basic : 기본 지원 타입 맵핑 (거의 안씀)\
- @Table
- 애노테이션 생략 - 클래스 이름과 동일한 이름에 맵핑
- 속성
- name : 테이블 이름 (Defualt 클래스 이름과 동일한 이름)
- catalog : 카탈로그 이름 (Ex. MySql DB 이름)
- schema : 스키마 이름 (Ex. 오라클 스키마 이름)
- 예
- @Table
- @Table(name = "hotel_info")
- @Table(catalog = "point", name = "point_history")
- @Table(schema = "crm", name = "cust_stat")\
- @Enumberated
- 설정 값
- EnumType.STRING : enum타입 값 이름을 저장
- 문자열 타입 컬럼에 맵핑
- EnumType.ORDINAL (기본값) : enum 타입의 값의 순서를 저장
- 숫자 타입 칼럼에 맵핑
- EnumType.STRING : enum타입 값 이름을 저장
- 예
- public enum Grade { S1, S2, S3 }
- EnumType.STRING -> "S1"
Grade.S1.name() - EnumType.ORDINAL -> 0
Grade.S1.ordinal() - 만약 S0 추가하면 ordinal은 값이 변경됨 -> 값이 고정되지 않기때문에 ordinal은 잘 안씀
- 설정 값
- 엔티티 클래스 제약 조건
- @Entity 적용해야함
- @Id 적용해야함
- 인자 없는 기본 생성자 필요
- 기본 생성자는 public이나 protected여야함
- 최상위 클래스여야함
- final이면 안됨
@Entity // 맵핑대상이니까 엔티티 애노테이션 사용
@Table(name = "hotel_info") // 클래스 이름하고 다른 테이블을 사용하기 위해서 hotel_info 테이블에 맵핑
public class Hotel {
@Id // 식별자
@Column(name = "hotel_id") // id가 아니라 hotel_id에 맵핑
private String id;
...
protected Hotel() {
}
- 접근타입
- 두 개 접근 타입
- 필드 접근 : 필드값을 사용해서 맵핑 (불필요한 getter setter 생성안하기 위해 필드접근 사용권장)
- 프로퍼티 접근 : getter/setter 메서드를 사용해서 맵핑
- 설정 방법
- @Id 애노테이션을 필드에 붙이면 필드접근
- @Id 애노테이션을 getter 메서드에 붙이면 프로퍼티접근
- @Access 애노테이션을 사용해서 명시적으로 지정
- 클래스/개별 필드에 적용 가능
- @Access(AceesType.PROPERTY) / @Access(AccessType.FIELD)
- 개인적으로 필드 접근 선호
- 불필요한 setter 메서드를 만들 필요 없음
- 두 개 접근 타입
'Dev > JPA' 카테고리의 다른 글
| [JPA] - 영속성 컨텍스트 개념정리 (1) | 2024.09.08 |
|---|---|
| [JPA] - Entity Factory Manager, JPQL 개념 요약 (0) | 2024.09.08 |
| [JPA] - 비영속, 준영속, 영속 비교 (0) | 2024.07.03 |
| [JPA] - 엔티티 CRUD 처리 (0) | 2024.07.02 |
| [JPA] - 코드 구조 & 영속 컨텍스트 (0) | 2024.07.02 |
@wnseo :: wnseo
wnseo 개발
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!