TIL - JPA 내용 정리

su·2023년 8월 7일
0

TIL

목록 보기
59/93
post-thumbnail

JPA

에너테이션 정리

  1. @Entity
  • 객체 관점에서의 이름
  • Defalut는 클래스명으로 설정됨
  1. @Table
  • RDB의 데이터 이름
  • @Entity의 이름이 테이블의 기본 이름
  • Entity의 이름과 다르게 테이블 이름을 지정하고 싶을 때 사용
    @Entity
    @Table(name = "users")
    public class User() {...}
  1. @Id
  • 엔티티의 주 키를 매핑할 때 사용
  • 자바의 모든 primitive 타입과 그 랩퍼 타입을 사용할 수 있음
  1. @GeneratedValue
  • 주 키의 생성 방법을 매핑하는 에너테이션
  • 생성 전략과 생성기 설정 가능
    - 기본값은 AUTO
    • 그 외에 TABLE, SEQUENCE, IDENTITY가 있음
  1. @Column
  • 컬럼에 대한 에너테이션
  • 속성에는 name, unique, nullable, length, columnDefinition 등이 있음

Raw JPA 필드 타입 매핑 기능

  1. Value 타입 종류
  • 기본 타입
    • @Column: 공통으로 사이즈를 제한할 용도로 쓰임
    • @Enumerated: Enum 매핑용도로 쓰이며, 실무에서는 @Enmerated(EnumType.STRING)으로 사용 권장
    • Default 타입인 ORDINAL은 0, 1, 2 값으로 들어가므로 추후 순서가 바뀔 가능성이 있음
  1. Composite Value 타입
  • @Embeddable
  • @Embedded
  • @AttributeOverrides
  • @AttributeOverride
  1. Collection Value 타입
  • 기본 타입의 컬렉션
  • 컴포짓 타입의 컬렉션

Raw JPA 연관관계 매핑 기능

@OneToOne

  • 일대일 관계를 매핑하는 정보
  • 1:1 관계로 구성한다는 것은 결국 하나의 목적에 부합하는 공통된 데이터를 관리한다고 볼 수 있으며 이는 하나의 테이블에서 관리 할 수 있는 데이터일 가능성이 높다는 것 → 의도적인 중복이 아니라면 사용할 일이 없음
  • @OneToOne / @JoinColumn
  • @OneToOne(mappedBy = "")

@OneToMany

  • 일대다 관계를 매핑하는 정보
  • 속도를 위해 기본적으로 FetchType 설정이 LAZY로 되어 있음
  • 속성
    • mappedBy: 연관관계의 주인 필드 선택
    • fetch: 글로벌 패치 전략 설정
    • cascade: 영속성 전이 기능 사용
    • targetEntity: 연관된 엔티티의 타입 정보 설정

@ManyToOne

  • 다대일 관계를 나타내는 매핑 정보
  • 속성
    • optional: false로 설정하면 연관된 엔티티가 반드시 존재해야 함 (default는 true)
    • fetch: 글로벌 패치 전략 설정 (default는 EAGER이지만 LAZY 설정 추천)
    • cascade: 영속성 전이 기능 사용
    • targetEntity: 연관된 엔티티의 타입 정보 설정

@ManyToMany

  • 다대다 관계를 나타내는 매핑 정보 (N:M)
  • 다대다 설정을 하게 되면, 중간 매핑테이블(JoinTable)이 자동으로 생성됨
  • 중간 매핑 테이블은 JPA 상에서 숨겨져 관리됨 (직접 관리할 수 없음)
  • ex. TableA : TableB = N:M
    TableA : TableAB : TableB = 1:N:1 (1:N | N:1)
profile
(❁´◡`❁)

0개의 댓글