JPA 기초 - 기본키 매핑(Table), 필드와 컬럼 매핑(@Column)

2024. 1. 15. 17:02·JPA
본 내용은 유튜브 나무소리님의 강의 내용을 정리한 내용입니다.
JPA 3-4강 Entity Mapping(4)

Table 기본키 생성 전략

  • 기본키 생성을 위해 별도의 테이블을 생성하고 이 테이블을 이용해 기본키를 생성합니다.
  • Table 기본키 생성 전략은 별도의 테이블을 생성하기 때문에 데이터베이스 종류에 영향을 받지 않습니다.
  • Table 생성 전략을 적용하기 위해서는 @TableGenerator 어노테이션이 필요하며 여러 옵션을 적용할 수 있습니다.
  • Table 생성 전략은 테이블 생성과 키값 증가를 위한 update가 실행되기 때문에 성능에 대한 고려가 필요합니다.
package com.example.jpa.entity;

...

@NoArgsConstructor
@Data
@Entity
@Table(name = "customer_tb")
@TableGenerator( // 기본키 테이블 설정
        name = "id_generator",
        table = "customer_id",
        pkColumnName = "id_name",
        pkColumnValue = "customer_id",
        valueColumnName = "next_value",
        initialValue = 0, // 초기값 설정
        allocationSize = 1)
public class Customer {

    @Id
    @GeneratedValue(strategy = GenerationType.TABLE, generator = "id_generator")
    private Long id;
    private String name;
    private Long registerDate;

    ...
}

기본키 테이블 생성 및 INSERT 쿼리 실행

  • Table 기본키 생성 전략의 경우 해당 테이블(customer_id) 생성 후에 INSERT 쿼리를 실행합니다. (초기 값 설정)
  • @TableGenerator 어노테이션을 사용하여 테이블 기반의 시퀀스를 생성하고, initialValue를 0으로 설정하였습니다. 그리고 allocationSize를 1로 설정하여 한 번에 1씩 증가하도록 하였습니다.
  • Table 기본키 생성 전략의 경우 persist()가 실행될 때, 해당 테이블(customer_id)의 next_value를 조회하고, 1씩 증가시켜 다음 값을 얻게 됩니다.
  • allocationSize의 값을 1로 설정할 경우 Sequence 기본키 생성 전략과 마찬가지로 성능 문제를 야기 할 수 있게 때문에 적절한 값을 세팅합니다.

next_value 조회 후 update 실행

 

필드와 컬럼 매핑 - @Column

  • @Column 어노테이션은 영속 객체의 필드와 데이터베이스 테이블의 열(column)을 매핑할 때 사용합니다.
  • @Column 어노테이션은 다양한 옵션 기능을 제공하며 이를 통해 영속 객체 필드의 속성을 정의할 수 있습니다.
  • @Column의 여러 속성들은 대부분 선택적으로 사용하며 기본값이 지정되어 있습니다.
  • @Column 어노테이션이 지정되지 않는 경우, 기본적으로 @Basic 어노테이션이 적용됩니다.
  • @Basic 어노테이션은 테이블의 컬럼과 엔티티 객체의 필드 매핑을 위한 기본적인 설정을 해줍니다.
@Entity
@Table(name = "USERS")
public class User {
    @Id
    @Column(name = "USER_ID", nullable = false)
    private Long userId;
    
    @Column(name = "USER_NAME", nullable = false)
    private String username;
    
    @Column(name = "FIRST_NAME", nullable = false, length = 1)
    private String firstName;
    
    @Column(name = "LAST_NAME", nullable = false)
    private String lastName;
...
}
@Column 옵션
name 해당 테이블 열의 이름을 지정
nullable NULL 값 허용 여부(default : true)
unique Unique 제약 조건 여부(default : false)
length 문자(String)의 길이 지정(default : 255)
precision 숫자의 전체 자릿수 지정
scale 소수점 이하 자릿수 지정
insertable 엔티티가 저장될 때 컬럼이 저장될지 여부(default : true)
updatable 엔티티가 수정될 때 컬럼이 수정될지 여부(default : true)
table 컬럼이 속한 테이블 지정
columnDefinition 컬럼에 대한 정의를 직접 지정

 

'JPA' 카테고리의 다른 글

JPA 기초 - @Embeddable  (0) 2024.01.17
JPA 기초 - 연관관계의 방향성(ManyToOne, JoinColumn)  (0) 2024.01.16
JPA 기초 - 연관 관계의 이해  (0) 2024.01.16
JPA 기초 - 필드와 컬럼 매핑(@Temporal, @Lob, @Enumerated, @Translent)  (0) 2024.01.15
JPA 기초 - 기본키 생성 전략(Sequence)  (0) 2024.01.14
'JPA' 카테고리의 다른 글
  • JPA 기초 - 연관관계의 방향성(ManyToOne, JoinColumn)
  • JPA 기초 - 연관 관계의 이해
  • JPA 기초 - 필드와 컬럼 매핑(@Temporal, @Lob, @Enumerated, @Translent)
  • JPA 기초 - 기본키 생성 전략(Sequence)
PortLee
PortLee
  • PortLee
    프로그래밍 공부
    PortLee
  • 전체
    오늘
    어제
    • 분류 전체보기
      • C++
      • JAVA
      • JPA
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    @Basic
    Entity
    Entity 연관관계
    list
    MemberEntity
    JPA
    Translent
    @AttributeOverride
    1-N
    컬렉션 매핑
    1-1연관관계
    기본키 매핑
    필드와 컬럼 매핑
    persistence.xml
    MemberService
    다른 테이블 매핑
    컬랙션 매핑
    @Embeddable
    set
    @Access
    @Table
    allocationSize
    entity mapping
    SQL Mapping
    map
    Table 기본키 생성 전략
    @CollectionTable
    식별자공유
    MemberRepository
    JoinColumn
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
PortLee
JPA 기초 - 기본키 매핑(Table), 필드와 컬럼 매핑(@Column)
상단으로

티스토리툴바