본문 바로가기
Backend/JPA

JPA: 엔티티 매핑

by 코딩쥐 2025. 1. 14.

Entity 클래스를 생성하여 데이터베이스 테이블과 매핑하기 위해 사용되는 어노테이션은 아래와 같다. 

 

Entity 매핑

@Entity : JPA가 관리하여 테이블과 매핑되는 클래스이다. public 또는 protected생성자가 필요하다. final, enum, interface, inner 클래스는 엔티티로 사용할 수 없다.

@Entity

 

@Table : 엔티티와 매핑할 테이블을 지정한다.

@Table(
    name="테이블 명",
    catalog="카탈로그명(MariaDB나 MySQL은 데이터베이스 이름이 사용됨)",
    schema="테이블이 속할 스키마 지정",
    uniqueConstraints={@UniqueConstraint(columnNames ={"유일한 값 보장 컬럼"})})

 

Field와 Column 매핑 

@Column : 객체 필드를 테이블 컬럼에 매핑한다. @Column의 경우 별다른 옵션을 설정하지 않을 때는 생략이 가능하다.

@Column(
  name="컬럼명",
  insertable=true,    // 컬럼 삽입 시에 DB에 추가할 것인가
  updatable=true,   // update 시에 해당 컬럼을 반영할 것인가
  nullable=true,      // Null 값을 허용할 것인가  
  unique=false,      // 한 컬럼에 간단히 유니크 제약조 건을 적용할 때 사용
  length=255          // 문자 길이 제약 조건을 설정할 때 사용(String 타입)
  columnDefinition="VARCHAR(100) default 'EMPTY'"   // 직접 컬럼정보를 작성할 때 사용  
  precision=숫자    // BigDecimal, BigInteger에서 숫자 컬럼의 전체 자리수를 지정
  scale=숫자          // BigDecimal에서 소수점 아래 자리수를 지정
)

 

@Enumerated : enum형태로 되어있는 값을 데이터 타입으로 사용하고자 할 때 사용한다. enum 이름을 데이터베이스에 저장한다.

 

@Lob : DB에서 VARCHAR를 넘는 용량이 큰 내용을 넣고 싶은 경우에 사용된다. 타입이 문자열일 경우 CLOB, 그 외 BLOB과 매핑된다.

@Transient : 특정 필드를 컬럼에 매핑하지 않아, 메모리상에서만 임시로 값을 보관한다.

@Enumerated(EnumType.String)

@Lob

@Transient

 

기본 키 매핑

@Id : 직접 기본키를 할당한다. 기본키로 사용할 필드에 @Id를 작성한다.

 

@GeneratedValue : 기본키를 자동 생성하는 방식이다.

  • Identity : 기본 키 생성을 DB에 위임
  • Sequence : DB Sequence를 사용해 기본 키를 할당 @SequenceGenerator을 사용하여 Sequence를 명시 후 사용
  • Table :  키 생성 전용 테이블을 사용하는 방식
  • UUID : 16바이트의 랜덤한 숫자로 표현되며, 전 세계적으로 유일한 값을 생성하는데 사용
    • 컬럼 타입은 가급적 binary(16)으로 생성한다. UUID는 버전이 1부터 5까지 있으며, Hibernate에서는 버전1과 버전2를 default로 제공한다. 버전1의 경우 MAC 주소를 기반으로 생성되며, 버전2의 경우에는 버전1에서 확장된 형태로 MAC 주소와 타임스탬프 및 사용자/그룹 식별자가 포함된다.
@Id

@GeneratedValue(strategy = GenerationType.IDENTITY | SEQUENCE | TABLE )

@GeneratedValue(generator="uuid")
@GenericGenerator(name="uuid", strategy="uuid2")
@Column(columnDefinition="binary(16)")