반응형
해당 강의는 코드 위주로 진행됩니다. 실질적인 객체 처리를 담당하는 코드는 링크에서 확인하시길 바랍니다.
* 엔티티 매핑
- 기본 애노테이션
- @Entity : 엔티티 클래스에 설정한다, 필수로 사용해야한다.
- @Table : 매핑할 테이블을 지정한다.
- @Id : 식별자와 매핑하기 위해 사용한다. 필수로 사용해야한다.
- @Column : 매핑할 칼럼명을 지정하기 위해 사용한다.
- 지정하지 않으면 필드명 / 프로퍼티명을 사용한다
- @Enumerated : enum타입을 매핑할 때 사용한다.
- @Temporal : java.util.Date, java.util.Calender를 매핑할 때 사용한다.
- 자바8 시간 / 날짜 타입 등장 이후 거의 쓰지 않는다.
- @Basic : 기본 지원 타입을 매핑하기 위해 사용한다. 생략을 해도 무방하기 때문에 거의 사용하지 않는다.
* @Table 애노테이션
- 애노테이션을 생략하면 클래스 이름과 동일한 이름에 매핑된다
- 속성
- name : 테이블 이름 (생략하면 클래스 이름과 동일한 테이블 이름에 매핑된다)
- catalog : 카탈로그 이름 (MySQL, mongoDB 등 DB 이름을 명시적으로 지정하고 싶을 때 사용한다)
- schema : 스키마 이름 (오라클 등 schema이름을 명시적으로 지정하고 싶을 때 사용한다)
- 예시
- @Table
- @Table(name = "hotel_info")
- @Table(catalog = "point", name = "point_history")
- @Table(schema = "crm", name = "cust_stat")
* @Enumerated 애노테이션
- 설정 값
- EnumType.STRING : enum 타입 값 이름을 저장
- 문자열 타입 칼럼에 매핑
- EnumType.ORDINAL : enum 타입의 값의 순서를 저장
- 숫자 타입 칼럼에 매핑
- 값의 순서는 코드 상에서의 사용 위치에 따라 달라지기 때문에 사용하지 않는다.
* 매핑 설정 예
@Entity // 매핑 대상 엔티티
@Table(name = "hotel_info") // hotel_info 테이블에 매핑
public class Hotel {
@Id // 식별자로 매핑
@Column(name = "hotel_id") // hotel_id 칼럼에 매핑
private String id;
@Column(name = "nm") // nm 칼럼에 매핑
private String name;
private int year; // year 칼럼에 매핑
@Enumerated(EnumType.STRING) // 열거 타입 이름을 값으로 저장
private Grade grade; // grade 칼럼에 매핑
private LocalDateTime created; //created 칼럼에 매핑
@Column(name = "modified") //modified 칼럼에 매핑
private LocalDateTime lastModified;
* 엔티티 클래스 제약 조건 (스펙 기준)
- @Entity를 적용해야 한다.
- @Id를 적용해야 한다.
- 인자가 없는 기본 생성자가 필요하다.
- 기본 생성자는 public 이나 protected 여야 한다.
- 최상위 클래스여야 한다.
- final이면 안된다.
* 접근 타입
- 두 가지 접근 타입
- 필드 접근 : 필드 값을 사용해서 DB와 매핑
- 프로퍼티 접근 : getter/setter 메서드를 사용해서 DB와 매핑
- 설정 방법
- @Id 애노테이션을 필드에 붙이면 필드에 접근한다.
- @Id 애노테이션을 getter 메서드에 붙이면 프로퍼티에 접근한다.
- @Access 애노테이션을 사용해서 명시적으로 지정
- 클래스 / 개별 필드에 적용 가능
- @Access(AccessType.PROPERTY) / @Access(AccessType.FIELD)
- 필드 접근을 선호
- 불필요한 setter 메서드를 만들 필요가 없다.
* 정리
-주요 매핑 애노테이션
- @Entity, @Table, @Id, @Column, @Enumerated
- 엔티티 클래스 제약
- 기본 생성자 필요 등 몇 가지 제약이 있다.
- 접근 타입
- 필드 접근(*), 프로퍼티 접근
반응형
'Programming > JPA & Spring Data JPA 기초' 카테고리의 다른 글
06. @Embeddable (0) | 2023.02.27 |
---|---|
05. 엔티티 식별자 생성 방식 (0) | 2023.02.23 |
03. 엔티티 단위 CRUD 처리 (0) | 2023.02.21 |
02. 코드 구조 & 영속 컨텍스트 (0) | 2023.02.20 |
01. 일단 해보기 (0) | 2023.02.20 |
댓글