728x90
배송, 카테고리 추가 - 엔티티



- 주문과 배송은 1:1(@OneToOne)
- 상품과 카테고리는 N:M(@ManyToMany)
Delivery Entity
@Entity
public class Delivery {
@Id
@GeneratedValue
private Long id;
private String city;
private String street;
private String zipcode;
private DeliveryStatus status;
@OneToOne(mappedBy = "delivery")
private Order order;
}
- 일대일 연관관계로 연관관계의 주인이 아닌 Order에 mappedby 옵션을 준다.
- 일대일 연관관계는 연관관계의 주인이 어디에 있든지 상관없다
Order Entity 수정

- 주 테이블에 연관관계의 주인이 되어야 하므로 mappedBy를 쓰지 않았다.
Category Entity
@Entity
public class Category {
@Id
@GeneratedValue
private Long id;
private String name;
@ManyToOne
@JoinColumn(name = "PARENT_ID")
private Category parent;
@OneToMany(mappedBy = "parent")
private List<Category> child = new ArrayList<>();
@ManyToMany
@JoinTable(name = "CATEGORY_ITEM"
,joinColumns = @JoinColumn(name = "CATEGORY_ID")
,inverseJoinColumns = @JoinColumn(name = "ITEM_ID"))
private List<Item> items = new ArrayList<>();
}
- Item과 다대다 연관관계를 가진다
- @JoinTable을 통해 중간 테이블을 두어 다대다 연관관계를 풀어서 작성한다.
Item Entity 수정

N:M 관계는 1:N, N:1로
- 테이블의 N:M 관계는 중간 테이블을 이용해서 1:N, N:1
- 실전에서는 중간 테이블이 단순하지 않다.
- @ManyToMany는 제약: 필드 추가X, 엔티티 테이블 불일치
- 실전에서는 @ManyToMany 사용X
@JoinColumn 정리
| 속성 | 설명 | 기본값 |
| name | 매핑할 외래 키 이름 | 필드명 + _ + 참조하는 테 이블의 기본 키 컬럼명 |
| referencedColumnName | 외래 키가 참조하는 대상 테이블의 컬럼명 참조하는 테이블의 기본 | 참조하는 테이블의 기본 키 컬럼명 |
| foreignKey(DDL) | 외래 키 제약조건을 직접 지정할 수 있다. 이 속성은 테이블을 생성할 때만 사용한다. |
|
| unique nullable insertable updatable columnDefinition table |
@Column의 속성과 같다 |
@ManyToOne - 주요 속성
| 속성 | 설명 | 기본값 |
| optional | false로 설정하면 연관된 엔티티가 항상 있어야 한다. | TRUE |
| fetch | 글로벌 페치 전략을 설정한다. | @ManyToOne=FetchType.EAGER @OneToMany=FetchType.LAZY |
| cascade | 영속성 전이 기능을 사용한다. | |
| targetEntity | 연관된 엔티티의 타입 정보를 설정한다. 이 기능은 거 의 사용하지 않는다. 컬렉션을 사용해도 제네릭으로 타 입 정보를 알 수 있다. |
@OneToMany - 주요 속성
| 속성 | 설명 | 기본값 |
| mappedBy | 연관관계의 주인 필드를 선택한다. | |
| fetch | 글로벌 페치 전략을 설정한다. | @ManyToOne=FetchType.EAGER @OneToMany=FetchType.LAZY |
| cascade | 영속성 전이 기능을 사용한다. | |
| targetEntity | 연관된 엔티티의 타입 정보를 설정한다. 이 기능은 거의 사용하지 않는다. 컬렉션을 사용해도 제네릭으로 타입 정보를 알 수 있다. |
- 다대일은 mappedBy가 없다 -> 연관관계의 주인이 되어야 된다는 뜻이다.
728x90
'자바 ORM 표준 JPA 프로그래밍(인프런)' 카테고리의 다른 글
| Ch07. 고급 매핑 - @MappedSuperclass(매핑 정보 상속) (0) | 2021.12.14 |
|---|---|
| Ch07. 고급 매핑 - 상속관계 매핑 (0) | 2021.12.14 |
| Ch06. 다양한 연관관계 매핑 - 다대다 [N:M] (0) | 2021.12.13 |
| Ch06. 다양한 연관관계 매핑 - 일대일 [1:1] (0) | 2021.12.13 |
| Ch06. 다양한 연관관계 매핑 - 일대다 [1:N] (0) | 2021.12.13 |