컴공댕이 공부일지

[JPA] 4장 - 엔티티 매핑 본문

study/웹개발 스터디 백엔드 EFUB 💻

[JPA] 4장 - 엔티티 매핑

은솜솜솜 2025. 3. 30. 22:23
728x90


본 글은 도서 '자바 ORM 표준 JPA 프로그래밍'의 4장 요약 정리본입니다.

 

 

 

 - JPA 매핑 어노테이션

  • 객체, 테이블 매핑 : @Entity, @Table
  • 기본 키 매핑 : @Id
  • 필드와 컬럼 매핑 : @Column
  • 연관관계 매핑 : @ManyToOne, @JoinColum

 


 

 

 

 

☑️ @Entity

테이블과 매핑할 클래스에 붙이는 어노테이션

 

@Entity 적용 시 주의사항

  • 기본 생성자 필수
  • final, enum, interface, inner 클래스에 사용 불가
  • 저장 필드에 final 사용 불가

 


 

 

☑️ @Table

엔티티와 매핑할 테이블을 지정하는 어노테이션

 

  • 엔티티와 매핑할 테이블을 지정.
  • name 속성을 설정 안하면, 엔티티 이름 그대로 사용 !

 


 

 

 

 

☑️ 다양한 매핑 사용

package jpabook.start;

import javax.persistence.*;
import java.util.Date;

@Entity
@Table(name="MEMBER")
public class Member {

    @Id
    @Column(name = "ID")
    private String id;

    @Column(name = "NAME", nullable = false, length = 10) 
    private String username;

    private Integer age;

    @Enumerated(EnumType.STRING)
    private RoleType roleType;

    @Temporal(TemporalType.TIMESTAMP)
    private Date createdDate;

    @Temporal(TemporalType.TIMESTAMP)
    private Date lastModifiedDate;

    @Lob
    private String description;

    @Transient
    private String temp;

    // Getter, Setter
    ...
}

 

 


 

 

☑️ 데이터베이스 스키마 자동 생성

 

JPA는 데이터베이스 스키마를 자동으로 생성하는 기능을 지원

<property name="hibernate.hbm2ddl.auto" value="create" />

어플리케이션 실행 시점에 데이터베이스 테이블을 자동으로 생성해주는 속성. (persistence.xml)

 

하이버네이트 설정

  • create : 기존 테이블을 삭제하고 다시 생성
  • create-drop : create와 동일하나, 애플리케이션 종료 시 생성한 DDL 제거
  • update : 변경 사항만 수정
  • validate : 변경 사항이 있으면 경고 후 실행하지 않음

 


 

 

☑️ DDL 생성 기능

@Column → DDL 생성 시 제약 조건을 추가

@Column(name = "NAME", nullable = false, length = 10)
private String name;
  • nullable = false : NOT NULL 제약 조건 추가
  • length = 10 : 컬럼 길이 설정

 


 

 

☑️ 기본 키 매핑

1️⃣ 직접 할당

@Id
private String id;
  • em.persist() 호출 전, 애플리케이션에서 직접 할당

 

2️⃣ 자동 생성

 

IDENTITY 전략

  • 기본 키 생성을 DB에 위임하는 방식
  • MySQL, PostgreSQL, SQL Server, DB2에서 주로 사용
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

SEQUENCE 전략

  • 데이터베이스 시퀀스를 이용하여 키를 생성
  • Oracle, PostgreSQL, DB2, H2에서 사용 가능
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;

TABLE 전략

  • 키 생성 전용 테이블을 사용하여 키를 관리
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private Long id;

AUTO 전략

  • 데이터베이스 방언에 따라 IDENTITY, SEQUENCE, TABLE 중 자동 선택

 


 

 

☑️ 필드와 컬럼 매핑

 

@Column

객체 필드를 테이블의 컬럼에 매핑

 

@Enumerated

enum 타입을 매핑

  • EnumType.ORDINAL (기본값) : 숫자로 저장
  • EnumType.STRING : 문자열로 저장 (추천)

 

@Temporal

날짜 타입을 매핑

  • TemporalType.DATE : DATE 타입 매핑
  • TemporalType.TIME : TIME 타입 매핑
  • TemporalType.TIMESTAMP : TIMESTAMP 타입 매핑

 

@Lob

큰 데이터 (BLOB, CLOB)를 저장할 때

 

@Transient

해당 필드를 매핑하지 않고, JPA가 관리하지 않도록 설정

 

@Access

JPA가 엔티티에 접근하는 방식을 지정

  • AccessType.FIELD : 필드에 직접 접근
  • AccessType.PROPERTY : Getter를 통해 접근
728x90