프로그래밍/JPA

엔티티 맵핑

seungdols 2022. 10. 23. 21:58

Entity Mapping

  • 객체와 테이블: @Entity, @Table
  • 필드와 컬럼: @Column
  • 기본키: @Id
  • 연관관계: @ManyToOne, @JoinColumn

@Entity

  • 해당 어노테이션이 붙으면 JPA가 관리
  • 기본 생성자 필수
  • final 클래스, enum, interface, inner 클래스 사용 X
  • 저장할 필드에 final 사용 X

@Table

  • name: 매핑할 테이블 이름
  • catalog: 데이터베이스 catalog 매핑
  • schema: 데이터베이스 schema 매핑
  • DDL 유니크 제약 조건

데이터베이스 스키마 자동생성

  • DDL을 어플리케이션 실행 시점에 자동 생성
  • 테이블 중심 -> 객체 중심
  • 이런 DDL은 개발장비에서만 사용

hibernate.hbm2ddl.auto

운영장비에는 절대로 create, create-drop, update 사용하면 안된다.

  • create (drop + create)
  • create-drop (종료시점 drop)
  • update (변경분만 반영)
  • validate (엔티티와 테이블 정상 매핑인지 확인)
  • none

스테이징과 운영서버는 validate, none을 써야 한다.

DDL 생성기능

  • @Column(nullable=true, length=10)
    • unique도 조건을 줄 수 있음.
  • @Table
    • uniqueConstraints 추가 가능

DDL 생성기능은 DDL을 자동 생성할 때만 사용되고, JPA의 실행 로직에는 영향을 주지 않는다.

@Column 의 속성

  • name
  • insertable/updatable
  • nullable
  • unique
    • column에서는 제약 조건 이름이 랜덤 문자열로 생성 되어 잘 안쓰고 쓸일이 있다면, Class Entity 레벨에서 이름을 주고 쓰는게 좋다.
  • columnDefinition
  • length
  • precision/scale

Enumerated의 주의 사항

  • value: ordinal 절대 사용 X
    • EnumType.ORDINAL
      • enum 순서를 저장
    • EnumType.STRING
      • enum 이름을 저장

@Temporal

날자 타입을 매핑할 때 사용, LocalDate, LocalDateTime을 사용할 때는 생략가능(최신 하이버네이트)

  • value
    • TemporalType.DATE
    • TemporalType.TIME
    • TemporalType.TIMESTAMP

@Lob

  • 지정할 수 있는 속성이 없음
  • 매핑하는 필드 타입이 문자면 CLOB 매핑, 나머지는 BLOB 매핑

@Transient

  • 필드 매핑 안됨.
  • 메모리 상에서 임시로 어떤 값을 보관하고 싶을 때 사용함.

기본 키 매핑

@GeneratedValue

  • IDENTITY
    • DB에 위임, MYSQL
  • SEQUENCE
    • 시퀀스 오브젝트 사용, ORACLE
    • @SeqeunceGenerator 필요
  • TABLE
    • 키 생성용 테이블 사용
    • 모든 DB 사용
      • 다만, 성능의 단점이 존재
    • @TableGenerator
  • AUTO
식별자 전략
  • 기본이 제약 조건: null 아님, 유일, 변하면 안된다.
  • 미래까지 조건을 만족하는 자연키는 찾기 어렵다.
  • 권장: Long + 대체키 + 키 생성 전략 사용

INDENTITY 전략

  • 기본 키를 DB에 위임 했기 때문에, INSERT SQL 시점에만 기본키를 알 수 있음.
  • 그래서, commit 시점이 아닌, persist 하는 시점에 INSERT SQL이 전송 된다.
반응형

'프로그래밍 > JPA' 카테고리의 다른 글

고급 매핑 전략  (0) 2022.10.23
다양한 연관관계 매핑  (0) 2022.10.23
연관관계 매핑  (0) 2022.10.23
영속성 관리  (0) 2022.10.23
JPA 입문  (0) 2022.10.23