gony-dev 님의 블로그

[JPA] 자바 ORM 표준 JPA 프로그래밍 - 엔티티 매핑 본문

Spring/JPA

[JPA] 자바 ORM 표준 JPA 프로그래밍 - 엔티티 매핑

minarinamu 2024. 8. 28. 14:51
  • 매핑은 키 역할을 하는 데이터와 값 역할을 하는 데이터를 짝 지어 저장하는 데이터 구조를 의미한다.
    • 그렇다면 매핑에는 어떤 유형이 존재할까?

객체와 테이블 매핑


  • 객체와 테이블 매핑은 '@Entity'와 '@Table' 간의 연관관계를 의미한다.
  • "@Entity"가 붙은 클래스는 JPA가 관리하고, "@Table"이 붙은 클래스는 엔티티와 매핑할 테이블을 지정하는 것을 의미한다.
  • 컬럼 매핑 - "@Column"
  • 기본 키 매핑 - "@Id"
  • 연관관계 매핑 - "@ManyToOne", "@JoinColumn"

 

 

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


  • 데이터베이스 스키마에는 여러 종류가 있다.
    1. create: 기존테이블 삭제 후 다시 생성
    2. create-drop: create와 같으나 종료시점에 테이블 drop
    3. update: 변경 사항만 반영
    4. validate: 엔티티와 테이블이 정상 매핑되었는지에 대한 여부만 확인한다.
    5. none: 사용하지 않는다.
  • 주의할 점!
    • 개발 초기 단계는 create나 update 사용을 권장한다.
    • 테스트 서버는 update나 validate 사용을 권장한다.
    • 스테이징과 운영 서버는 validate나 none을 권장한다.

 

필드와 컬럼 매핑


우선 필드에 사용하는 어노테이션을 정리해 보겠다.

  1. @Column: 컬럼 매핑
  2. @Temporal: 날짜 타입 매핑
    • 날짜 타입을 매핑할 때 사용한다.
    • 단, LocalDate, LocalDateTime을 사용할 때는 생략이 가능하다!
  3. @Emurated: enum 타입 매핑
    • 해당 어노테이션을 사용 시 optional은 사용을 금지한다.(optional을 순서를 저장하기 때문이다.)
    • Role이나 2개 이상 타입이 존재할 때 사용하는 것을 권장한다.
    • EnumType.String: enum 이름을 String 형태로 데이터베이스로 저장한다.
  4. @Lob: BLOB, CLOB에 매핑
  5. @Transient: 특정 필드를 컬럼에 매핑한다.

 

기본키 매핑


기본 키(PK)는 엔티티에 저장되어 있는 인스턴스를 식별하기 위해 필요한 중요한 컬럼이다.

그래서 "@Id" 어노테이션을 사용하여 해당 컬럼이 기본 키라는 것을 지정해 준다.

  1. @Id: 직접 할당
  2. @GeneratedValue: 기본 키가 자동 생성되게끔 설정
    • IDENTITY: 기본 키 생성을 DB에 위임하며, JPA는 보통 트랜잭션 커밋 시점에 INSERT SQL를 실행하여 저장한다.
    • SEQUENCE: DB 시퀀스 오브젝트를 사용하며, ORACLE에서 사용한다.
    • TABLE: 키 생성용 테이블을 사용한다.
    • AUTO: 방언에 따라 자동 지정한다.
  • 현재 많이 쓰이는 식별자 전략으로는 "Long형 필드 + 대체키 + 키" 생성전략을 사용하는 것이 최선이다!