Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
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
Tags
more
Archives
Today
Total
관리 메뉴

지우쓰 개발일기

[JPA] Entity Mapping 본문

Spring Boot/JPA

[JPA] Entity Mapping

jiwoo-kimm 2020. 9. 13. 15:48

본 포스팅은 자바 ORM 표준 JPA 프로그래밍 (김영한 저)을 읽고 정리한 내용입니다.

 

자바 ORM 표준 JPA 프로그래밍

에이콘 오픈 소스 프로그래밍 시리즈. 이 책은 JPA 기초 이론과 핵심 원리, 그리고 실무에 필요한 성능 최적화 방법까지 JPA에 대한 모든 것을 다룬다.

www.aladin.co.kr


대표적인 Entity Mapping Annotation

  • 객체와 테이블 매핑: @Entity, @Table

  • 기본 키 매핑: @Id

  • 필드와 컬럼 매핑: @Column

  • 연관관계 매핑: @ManyToOne, @JoinColumn

  • 접근 방식: @Access

 

@Entity

테이블과 매핑할 클래스 필수 지정
  • 기본 생성자 필수

  • final, enum, interface, inner 클래스에는 사용 불가

  • 필드에 final 사용 불가

속성 기능 기본값
name JPA에서 사용할 엔티티 이름 클래스 이름

 

@Table

엔티티와 매핑할 테이블 지정
  • 생략 시 엔티티 이름을 테이블 이름으로 사용

속성 기능 기본값
name 매핑할 테이블 이름 엔티티 이름
catalog catalog 기능이 있는 DB에 catalog 매핑  
schema schema 기능이 있는 DB에 schema 매핑  
uniqueConstraints(DDL) DDL 생성 시 uniqueConstraints 생성  

 

@Column

필드와 매핑할 컬럼 지정
  • 생략 시

    • 자바 기본 타입: @Column 생략 시 not null / @Column 사용하고 nullable은 생략 시 nullable

    • 객체 타입: 별도 nullable 생략 시 nullable

속성 기능 기본값
name 매핑할 컬럼 이름 필드 이름
nullable(DDL) null값 허용 여부 true
unique(DDL) 한 컬럼에 uniqueConstraints
 
columnDefinition(DDL) DB 컬럼 정보 직접 지정 자바 타입 + 방언 정보를 사용해 적절히 생성
length(DDL) String 길이 제약 조건 255
table 매핑할 테이블 이름 기본 엔티티 테이블

cf.) 이름 매핑 전략

<property name="hibernate.ejb.naming_strategy"
    value="org.hibernate.cfg.ImprovedNamingStrategy" />

→ 자바의 Camel 표기법을 DB의 언더스코어(_) 구분법으로 자동 매핑

 

@Enumerated

자바 enum 타입 매핑
속성 기능 기본값
value - EnumType.ORDINAL: 순서 (숫자)
- EnumType.String: 이름 (문자)
EnumType.ORDINAL

 

@Temporal

날짜(java.util.Date, java.util.Calendar) 타입 매핑
속성 기능 기본값
value - TemporalType.DATE
- TemporalType.TIME
- TemporalType.TIMESTAMP
필수 지정 필요

 

@Transient

매핑하지 않고 객체에 임시로 보관만 하는 필드

 

PK 매핑

persistence.xml
<property name="hibernate.id.new_generator_mappings" value="true" />
1. 직접할당 (@Id)
  • em.persist()로 엔티티 저장 전 기본 키 직접 할당

  • 적용 가능 자바 타입

    • 자바 기본형

    • 자바 Wrapper형

    • String

    • java.util.Date / java.sql.Date

    • java.math.BigDecimal

    • java.math.BigInteger

2. 자동생성 (@Id + @GeneratedValue)
  • IDENTITY 전략

    • DB에 PK 생성 위임

    • @GeneratedValue(strategy = GenerationType.IDENTITY)

    • 생성된 PK 값을 얻어오기 위해 쓰기 지연 없이 바로 Insert 후 DB 추가 조회

    • MySQL, PostgreSQL, SQL Server, DB2

  • SEQUENCE 전략 (p.135)

    • DB 시퀀스: 유일한 값을 순서대로 저장하는 DB object

    • Oracle, PostgreSQL, DB2, H2

    • (일단 넘어감! 나중에 돌아와서 봐야지..)

  • TABLE 전략

    • 키 생성 전용 테이블을 만들어 시퀀스와 유사한 효과

    • (이것도 일단 넘어감! 나중에 꼭 돌아오자..)

  • AUTO 전략

    • 위 세 전략 중 DB 방언에 따라 자동으로 선택

 

@Access

JPA가 엔티티에 접근하는 방식
접근 방식 기능
AccessType.PROPERTY Getter로 접근
AccessType.FIELD 필드에 직접 접근 (private 무관)

 

'Spring Boot > JPA' 카테고리의 다른 글

[JPA] 영속성 전이, 고아 객체  (0) 2020.09.13
[JPA] Proxy, Eager Loading, Lazy Loading  (0) 2020.09.13
[JPA] @SecondaryTable  (0) 2020.09.13
[JPA] Join Table  (0) 2020.09.13
[JPA] 복합키와 식별관계 Mapping  (0) 2020.09.13
Comments