spring JPA 엔티티 매핑 정리

Q·2024년 5월 5일

Spring 심화

목록 보기
3/9

엔티티 매핑

1. 객체와 테이블 매핑

  • @Entity

    • JPA가 관리하는 클래스
    • 테이블과 매핑할 클래스
    • 기본 생성자(public, protected)를 필수로 생성해야 한다.
  • @Table

    • 속성
      • name
        • JPA에서 사용할 엔티티 이름을 지정한다.
        • 기본값 : 클래스의 이름을 그대로 사용한다.
        • 같은 클래스 이름이 없으면 가급적 기본값을 사용한다.
      • catalog
        • 데이터베이스 catalog 매핑
      • schema
        • 데이터베이스 schema 매핑
      • uniqueConstraints
        • DDL 생성 시에 유니크 제약 조건 생성

2. 필드와 컬럼 매핑

  • @Column

    • 컬럼 매핑
    • 속성
      • name
        • 필드와 매핑할 테이블의 컬럼 이름
      • insertable, updatable
        • 등록, 변경 가능 여부
      • nullable(DDL)
        • null 값의 허용 여부
      • unique(DDL)
        • unique 제약 조건
      • columnDefinition(DDL)
        • 컬럼 정보
      • length(DDL)
        • 문자 길이 제약 조건, String 타입만 적용 가능
      • percision, scale(DDL)
        • BigDecimal 타입에서 사용한다.
        • precision은 소수점을 포함한 전체 자릿수
        • scale은 소수의 자릿수
  • @Temporal

    • 날짜 타입 매핑
    • 속성
      • TemporalType.Date
        • 날짜, 데이터베이스 date 타입과 맵핑
        • e.g. 2013-10-11
      • TemporalType.Time
        • 시간, 데이터베이스 time 타입과 매핑
        • e.g. 11:11:11
      • TemporalType.TIMESTAMP
        • 날짜와 시간, 데이터베이스 timestamp 타입과 매핑
        • e.g. 2013-10-11 11:11:11
  • @Enumerated

    • enum 타입 매핑
    • value
      • EnumType.ORDINAL
        • 순서를 숫자로(우리가 아는 enum) 절대 사용하면 안된다.
      • EnumType.STRING
        • enum 이름을 데이터베이스에 저장
        • 무조건 이걸 사용해야 한다.
  • @Lob

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

    • 특정 필드를 컬럼에 매핑하지 않음(매핑 무시)
    • 데이터베이스에 저장, 조회 하지 않음
    • 주로 메모리상에서만 임시로 어떤 값을 보관하고 싶을 때

3. 기본 키 매핑

  • @Id

  • @GeneratedValue

    • strategy = GenerationType.IDENTITY
      • 데이터베이스에 위임
      • MYSQL(AUTO_INCREMENT)
      • AUTO_INCREMENT는 데이터베이스 insert 문을 실행한 이후에 ID 값을 알 수 있다.
      • IDENTITY 전략은 em.persist 시점에 즉시 insert문을 실행하고 DB에서 식별자를 조회한다.
  • strategy = GenerationType.SEQUENCE

    • 데이터베이스 시퀀스 오브젝트 사용
    • ORABLE
    • @SequenceGenerator 필요
    • 속성
      • name
        • 식별자 생성기 이름
      • sequenceName
        • 데이터베이스에 등록되어 있는 시퀀스 이름
      • initialValue
        • DDL 생성 시에만 사용됨, 시퀀스 DDL을 생성할 때 처음 시작하는 수를 지정한다.
      • allocationSize
        • 시퀀스 한 번 호출에 증가하는 수
        • 데이터베이스 시퀀스 값이 하나씩 증가하도록 설정되어 있으면 이 값을 반드시 1로 설정해야 한다.
      • catalog, schema
  • strategy = GenerationType.TABLE

    • 키 생성용 테이블 사용
    • 모든 DB
    • @TableGenerator 필요
    • 속성
      • name
        • 식별자 생성기 이름
      • table
        • 키생성 테이블명
      • pkColumnName
        • 시퀀스 컬럼명
      • valueColumnName
        • 시퀀스 값 컬럼명
      • pkColumnValue
        • 키로 사용할 값 이름
      • initialvalue
        • 초기 값, 마지막으로 생성된 값이 기준이다.
      • allocationSize
        • 시퀀스 한 번 호출에 증가하는 수
      • catalog, schema
      • uniqueContrants(DDL)
  • strategy = GenerationType.AUTO

    • DB 방언에 따라 자동 지정
    • 기본값

    참고

  • https://liltdevs.tistory.com/149

profile
Data Engineer

0개의 댓글