1. 엔티티 매핑 관련
어노테이션설명
@Entity | 클래스가 JPA 엔티티임을 나타냅니다. |
@Table(name = "table_name") | 엔티티와 매핑되는 테이블 이름을 지정합니다. |
@Id | 기본 키 필드를 지정합니다. |
@GeneratedValue(strategy = GenerationType.IDENTITY) | 기본 키 값을 자동 생성합니다. |
@Column(name = "column_name") | 특정 필드를 테이블 컬럼과 매핑합니다. |
@Transient | 데이터베이스에 저장하지 않는 필드를 선언합니다. |
@Embedded | 값 타입 객체를 포함시킬 때 사용합니다. |
예시 코드
package com.example.demo.hr;
import java.sql.Date;
import java.util.List;
import org.hibernate.annotations.BatchSize;
import com.fasterxml.jackson.annotation.JsonIgnore;
import jakarta.annotation.Generated;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToMany;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
@Data
@ToString(exclude={"job","manager","dept"})
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
@Table(name="tbl_employees")
public class EmpEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long employee_id;
String first_name;
String last_name;
String email;
String phone_number;
Date hire_date;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="job_id")//생성시 칼럼 이름은 //외래키 만드는 구문
JobEntity job;
Long salary;
Double commission_pct;
//fetch는 조회연관,cascade는 DML 연관 (나의 ENTITY 변화가 연관관계 ENTITY 영향)
@ManyToOne
@JoinColumn(name="manager_id")//생성시 칼럼 이름은 //외래키 만드는 구문
EmpEntity manager;
@ManyToOne(cascade =CascadeType.ALL ,
fetch=FetchType.LAZY)
@JoinColumn(name="department_id")//생성시 칼럼 이름은 //외래키 만드는 구문
DeptEntity dept;
}
2. 연관 관계 매핑
어노테이션설명@OneToOne | 1:1 관계를 매핑합니다. |
@OneToMany | 1:N 관계를 매핑합니다. |
@ManyToOne | N:1 관계를 매핑합니다. |
@ManyToMany | N:M 관계를 매핑합니다. |
@JoinColumn(name = "fk_name") | 외래 키 컬럼을 지정합니다. |
@JoinTable | 다대다 관계에서 조인 테이블을 지정합니다. |
@Cascade (Hibernate) | 연관된 엔티티에 대한 연산을 전파합니다. |
3. 데이터 로딩 방식 (FetchType)
어노테이션설명fetch = FetchType.LAZY | 지연 로딩 |
fetch = FetchType.EAGER | 즉시 로딩 |
4. 상속 매핑
어노테이션설명@Inheritance(strategy = InheritanceType.SINGLE_TABLE) | 단일 테이블 전략 |
@DiscriminatorColumn(name = "type") | 상속된 엔티티 타입 구분 컬럼 지정 |
5. 기타 유용한 어노테이션
어노테이션설명@Enumerated(EnumType.STRING) | Enum 타입 필드를 문자열로 저장 |
@Temporal(TemporalType.DATE) | 날짜 및 시간 매핑 |
@Lob | 대용량 데이터 매핑 |
@PrePersist, @PostLoad | 엔티티 생명주기 이벤트 처리 |
6. 생명주기 이벤트 콜백
어노테이션설명@PrePersist | 엔티티가 저장되기 전에 호출 |
@PostPersist | 엔티티가 저장된 후 호출 |
@PreUpdate | 업데이트 전에 호출 |
@PostUpdate | 업데이트 후 호출 |
@PreRemove | 삭제 전에 호출 |
@PostRemove | 삭제 후 호출 |
@PostLoad | 엔티티 조회 후 호출 |
'SpringBoot > JPA' 카테고리의 다른 글
JPA EAGER / LAZY (0) | 2025.02.06 |
---|---|
JPQL (0) | 2025.02.03 |