컴공댕이 공부일지
[JPA] 4장 - 엔티티 매핑 본문
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
'study > 웹개발 스터디 백엔드 EFUB 💻' 카테고리의 다른 글
| [JPA] 10장 - 객체지향 쿼리 언어(1) (3) | 2025.05.26 |
|---|---|
| [JPA] 6장 - 다양한 연관관계 매핑 (0) | 2025.04.11 |
| [JPA] 5장 - 연관관계 매핑 기초 (0) | 2025.04.03 |
| [JPA] 2장 - JPA 시작 (0) | 2025.03.16 |
| [JPA] 1장 - JPA 소개 (0) | 2025.03.16 |