ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring JPA] 엔티티 매핑
    Spring/Spring JPA 2021. 6. 18. 17:24

    객체와 테이블 매핑

    @Entity

    • @Entity가 붙은 클래스는 JPA가 관리한다
    • 속성 : name
      • JPA에서 사용할 엔티티 이름을 지정한다
      • 같은 클래스 이름이 없으면 가급적 기본값을 사용한다

     

    @Table

    • @Table은 엔티티와 매핑할 테이블을 지정한다
    • 속성 : name
      • 매핑할 테이블의 이름을 지정한다
    • 속성 : catalog
      • 데이터베이스 catalog 매핑
    • 속성 : schema
      • 데이터베이스 schema 매핑
    • 속성 : uniqueConstraints
      • DDL 생성 시 유니크 제약 조건 생성

     

     

    필드와 컬럼 매핑

    @Column

    • 필드와 매핑할 테이블의 컬럼을 매핑한다
    • 기본값으로 필드의 이름을 사용한다

    @Enumerated

    • 자바의 enum 타입을 매핑할 때 사용한다
    • ORDINAL 대신에 STRING을 사용해야 한다

    @Temporal

    • 날짜 타입을 매핑할 때 사용한다
    • 속성 : value
      • TemporalType.DATE : DB date 타입과 매핑 (연월)
      • TemporalType.TIME : DB time 타입과 매핑 (연월
      • TemporalType.TIMESTAMP : DB timestamp 타입과 매핑

    @Lob

    • DB의 BLOB, CLOB 타입과 매핑
    • 매핑하는 필드 타입이 문자면 CLOB, 나머지는 BLOB과 매핑된다

    @Transient

    • 필드에서만 사용하고 싶은 경우 사용된다
    • DB와 무관하게 메모리상에서 임시로 보관하고 싶을 때 사용한다

    기본 키 매핑

    직접 할당

    • @Id : 코드레벨에서 직접 할당

    자동 생성

    • @GeneratedValue
      • IDENTITY 전략
        • 기본키 생성을 DB에 위임한다 (ex. AUTO_INCREMENT)
        • em.persist() 시점에 즉시 INSERT SQL 쿼리 실행 후 식별자를 조회하여 영속성 컨텍스트에 저장한다
      • SEQUENCE 전략
        • DB가 관리하는 시퀀스 객체를 기본키로 사용한다
        • 속성 : allocationSize
          • 시퀀스 한 번 호출에 증가하는 수를 지정하여 성능 최적화에 사용된다
          • 50으로 설정한 경우 DB는 50씩 증가하며 App에서는 1씩 증가한다
      • TABLE 전략
        • 키 생성 전용 테이블을 하나 만들어 DB 시퀀스를 흉내낸다
        • 모든 DB에 적용할 수 있지만 성능 이슈가 발생한다
      • AUTO(default)

    권장 식별자 전략

    • null이 아니면서 유일하고 변하지 않아야 한다
    • 일반적으로 이러한 자연키는 찾기 어려우므로 대리키를 사용한다
    • Long형 + 대체키 사용 + 키 생성전략을 사용해야 한다

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

    [Spring JPA] 영속성 컨텍스트의 특징  (0) 2021.06.14
    [Spring JPA] 엔티티의 생명주기  (0) 2021.06.14
    [Spring JPA] @어노테이션 정리  (0) 2021.06.14
Designed by Tistory.