Notice
Recent Posts
Recent Comments
Link
꾸준한 개발일기
JPA 어노테이션의 종류와 기능 본문
반응형
1. @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
- JPA에서 상속 매핑을 할 때 사용
- SINGLE_TABLE 전략은 부모와 자식 엔티티를 하나의 테이블에 저장하는 방식
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "dtype") // 구분 컬럼
public abstract class Item {
@Id @GeneratedValue
private Long id;
}
@Entity
@DiscriminatorValue("B") // dtype = "B"로 저장
public class Book extends Item {
private String author;
}
@DiscriminatorColumn(name = "dtype")
- 상속 구조에서 엔티티 구분을 위한 컬럼 설정
- 위 예시에서 dtype 컬럼에 "B", "M" 등 자식 타입을 저장
- 기본값은 DTYPE
@DiscriminatorValue("B")
- 해당 엔티티가 저장될 때 구분 컬럼에 들어갈 값을 지정
- 위 예시에서 Book을 저장하면 dtype 컬럼에 "B"가 저장
2. @Enumerated(EnumType.STRING)
- enum 타입 필드를 DB에 저장할 때 방식 지정
public enum DeliveryStatus {
READY, COMP
}
@Enumerated(EnumType.STRING)
private DeliveryStatus status;
- EnumType.STRING → "READY", "COMP" 등 문자열로 저장 (권장)
- EnumType.ORDINAL → 0, 1 같은 숫자로 저장 (비권장, 순서 바뀌면 문제 생김)
3. @OneToOne @JoinColumn(name = "delivery_id")
- 단방향 1:1 관계
- 현재 엔티티에 delivery_id FK 컬럼을 생성하고 Delivery 엔티티 참조
@OneToOne(mappedBy = "delivery") // 연관관계 주인 아님
private Order order;
4. @OneToOne(mappedBy = "delivery")
- 양방향 1:1 관계의 반대편(Delivery 측) 에서 사용하는 설정
- mappedBy는 연관관계의 주인이 아님을 의미
@OneToOne(mappedBy = "delivery") // 연관관계 주인 아님
private Order order;
- 위 예시에서는 Order.delivery가 연관관계의 주인이고,
Delivery.order는 그냥 매핑된 값
5 @ManyToMany @JoinTable(name = "category_item")
- N:N 다대다 관계 매핑
- 실제로는 중간 테이블(category_item)을 생성해서 다대다를 일대다 + 다대일로 풀어냄
@ManyToMany
@JoinTable(name = "category_item", // 중간 테이블 이름
joinColumns = @JoinColumn(name = "item_id"), // 현재 엔티티 FK
inverseJoinColumns = @JoinColumn(name = "category_id") // 반대쪽 엔티티 FK
)
private List<Category> categories = new ArrayList<>();
다대다는 실무에선 거의 안 씀 → 중간 테이블을 엔티티로 따로 만들어서 @ManyToOne, @OneToMany로 푸는 게 정석
반응형
'Programing > 스프링' 카테고리의 다른 글
Lombok과 @RequiredArgsConstructor란? (0) | 2025.03.25 |
---|---|
컴파일 오류(Compile), 런타임(Runtime Error), 논리 오류(Logic Error)란? (0) | 2025.03.24 |
스프링 의존관계 자동 주입 4가지 방법은? (0) | 2025.03.23 |
@Service 안 "비즈니스 로직"이란? (0) | 2025.03.22 |
스프링(Spring)과 스프링 부트(Spring Boot)의 차이 (0) | 2025.03.22 |
Comments