다대다
실무에서 안쓴다.
@Entity
@Getter @Setter
public class Category {
@Id @GeneratedValue
@Column(name = "category_id")
private Long id;
private String name;
@ManyToMany
@JoinTable(name = "category_item",
joinColumns = @JoinColumn(name = "category_id"),
inverseJoinColumns = @JoinColumn(name = "item_id"))
private List<Item> items = new ArrayList<>();
}
다대다는 위와같은 테이블 형태밖에 할 수 없다.
다대다에 테이블 설정을 해준다.
얘 입장에서 관여할 column은 category_id다. 카테고리니까.
inverseJoinColumns는 직역은 역 조인 컬럼인데,
말 그대로 반대편에서 관여할 컬럼이다.
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "dtype")
@Getter @Setter
public abstract class Item {
@Id @GeneratedValue
@Column(name = "item_id")
private Long id;
private String name;
private int price;
private int stockQuantity;
@ManyToMany(mappedBy = "items")
private List<Category> categories = new ArrayList<>();
}
mappedBy 해줘서 주인이 누군지 명확하게 해줬다.
그 다음,
계층 카테고리 구조.
나는 이게 1depth 카테고리 테이블, 2depth 카테고리 테이블 이렇게 나누는 줄 알았는데,
이런 식.
그냥 카테고리 라는 테이블 안에 정보를 다 넣어놓는데,
lev는 level의 줌말로 depth 얘기인 거 같고,
그러니까 대충, 부모카테고리의 id, 내 카테고리의 depth, 이 정도를 모아놓은 듯 하다.
@Entity
@Getter @Setter
public class Category {
@Id @GeneratedValue
@Column(name = "category_id")
private Long id;
private String name;
@ManyToMany
@JoinTable(name = "category_item",
joinColumns = @JoinColumn(name = "category_id"),
inverseJoinColumns = @JoinColumn(name = "item_id"))
private List<Item> items = new ArrayList<>();
@ManyToOne
@JoinColumn(name = "parent_id")
private Category parent;
@OneToMany(mappedBy = "parent")
private List<Category> child = new ArrayList<>();
}
여기 보면 그래서 내 테이블에서 조인해서 가져오는데,
부모는 하나를 가져오고,
자식들은 아마 join 해서 내 id가 parent_id인 것들을 가져올 것이다.
저도 뭐 저런 거 할 때 그냥 1depth 카테고리 테이블, 2depth 카테고리 테이블 이렇게 있는 거 아니야? 이렇게 생각했는데,
요런 식으로 그러니까,
아마도 내 depth, 부모 id,
그 정도로 해서 가져오는 듯 싶네요.
대충 내 depth, 부모_id, 카테고리네임 이 정도로 해서
한 카테고리 테이블에 다 때려넣는 식 인거 같아요.
그러니까 예를 들어 id를 통해 카테고리를 가져오게 되면,
거기에 부모_id, 또 나의 자식들은 내 id를 가지고 있을 테니
parent도 가져올 수 있고, child 들도 그냥 cc.parent_id = c.category_id 해서 가져올 수 있는..
'스프링데이터 + JPA > 웹 애플리케이션 개발' 카테고리의 다른 글
10. 구현 요구사항 (0) | 2023.11.05 |
---|---|
9. 엔티티 개발 주의점 (0) | 2023.11.05 |
7. 엔티티 개발 (0) | 2023.11.05 |
6. 도메인 모델과 테이블 설계 (0) | 2023.11.04 |
5. 요구사항 분석 (0) | 2023.11.04 |