[Spring/JPA] 엔티티 매핑

DoooongDong·2023년 1월 3일
0

JPA 기본편

목록 보기
2/7
post-thumbnail

1. 객체와 테이블 매핑

1) @Entity

  • @Entity가 붙은 클래스는 JPA가 관리하며, 엔티티라고 합니다.

  • JPA를 사용해서 테이블과 매핑할 클래스는 @Entity가 필수입니다.

  • name 속성은 JPA에서 사용할 엔티티 이름을 지정합니다.
    기본값으로는 클래스 이름을 그대로 사용합니다.

주의

  • 기본 생성자 필수
    • 파라미터가 없는 public or protected 생성자
    • Why? JPA를 구현해서 쓰는 라이브러리들이 다양한 기술을 사용해서 객체를 프록시할 때 필요하기 때문임
  • final 클래스, enum, interface, inner 클래스 사용 X
  • 저장할 필드에 final 사용 X

2) @Table

  • @Table은 엔티티와 매핑할 테이블을 지정합니다.

  • name 속성 : 매핑할 테이블 이름

  • catalog : 데이터베이스 catalog 매핑

  • schema : 데이터베이스 schema 매핑

  • uniqueConstraints(DDL) : DDL 생성 시에 유니크 제약 조건 생성

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

hibernate.hbm2ddl.auto

옵션설명
create기존테이블 삭제 후 다시 생성 (DROP + CREATE)
create-dropcreate와 같으나 종료시점에 테이블 DROP
update변경분만 반영(운영DB에는 사용하면 안됨)
validate엔티티와 테이블이 정상 매핑되었는지만 확인
none사용하지 않음
  • DDL을 애플리케이션 실행 시점에 자동 생성합니다.

  • 테이블 중심에서 객체 중심 개발이 가능합니다.

  • 데이터베이스 방언을 활용해서 데이터베이스에 맞는 적절한 DDL을 생성합니다.

  • 이렇게 생성된 DDL은 개발 장비에서만 사용해야합니다.

  • 생성된 DDL은 운영서버에서는 사용하지 않거나, 적절히 다듬은 후 사용합니다.

주의

  • 운영 장비에는 절대 create, create-drop, update 사용 X
  • 개발 초기 단계는 create 또는 update
  • 테스트 서버는 update 또는 validate
  • 스테이징과 운영 서버는 validate 또는 none

3. 필드와 컬럼 매핑

🔧 매핑 어노테이션 정리

hibernate.hbm2ddl.auto

어노테이션설명
@Column컬럼 매핑
@Temporal날짜 타입 매핑
@Enumeratedenum 타입 매핑
@LobBLOB, CLOB 매핑
@Transient특정 필드를 컬럼에 매핑하지 않음(매핑 무시)
  • @Enumerated : 자바 enum 타입을 매핑할 때 사용합니다.

    • EnumType.ORDINAL : enum 순서를 데이터베이스에 저장합니다.
      이 속성은 사용하지 않습니다.
      WHY? 요구 사항에 따라 새로운 Type이 추가될 수 있기 때문에 순서가 변경될 수 있습니다. 예를 들어서 GUEST를 enum class 맨 앞에 추가 했을 때 GUEST와 USER 모두가 '0'으로 저장됩니다.
    • 즉, EnumType.String을 사용해야합니다.
  • @Temporal : 날짜 타입을 매핑할 때 사용합니다.

  • @Lob : 데이터베이스 BLOB, CLOB 타입과 매핑합니다.

    • @Lob에는 지정할 수 있는 속성이 없습니다.
    • 매핑하는 필드 타입이 문자면 CLOB 매핑, 나머지는 BLOB 매핑입니다.
      • CLOB : String, char[], java.sql.CLOB
      • BLOB : byte[], java.sql.BLOB
  • @Transient

    • 필드 매핑 X
    • 데이터베이스에 저장 X, 조회 X
    • 주로 메모리상에서만 임시로 어떤 값을 보관하고 싶을 때 사용

4. 기본 키 매핑

1) 기본 키 매핑 방법

  • 직접 할당 : @Id만 사용
  • 자동 생성(@GeneratedValue)
    • IDENTITY : 데이터베이스에 위임, MYSQL
    • SEQUENCE : 데이터베이스 시퀀스 오브젝트 사용, ORACLE
      • @SequenceGenerator 필요
    • TABLE : 키 생성용 테이블 사용, 모든 DB에서 사용
      • @TableGenerator 필요
    • AUTO : 방언에 따라 자동 지정, 기본값

5. 권장하는 식별자 전략

  • 기본 키 제약 조건 : null 아님, 유일, 변하면 안됩니다.

  • 미래까지 이 조건을 만족하는 자연키는 찾기 어렵습니다.
    대리키(대체키)를 사용합시다.

  • 예를 들어 주민등록번호도 기본 키로 적절하지 않습니다.

  • 권장하는 방식Long형 + 대체키 + 키 생성전략 사용

[Reference]

자바 ORM 표준 JPA 프로그래밍 - 기본편 링크

https://gmlwjd9405.github.io/2019/08/11/entity-mapping.html

profile
꺾이지 말자 :)

0개의 댓글