티스토리 뷰
다대다
실습
새로 생성
Product
@Entity
@NoArgsConstructor
public class Product {
@Id
@GeneratedValue
private Long id;
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Member 에다가
@ManyToMany
@JoinTable(name = "MEMBER_PRODUCT")// 테이블명 적어줘야
private List<Product> products = new ArrayList<>();
실행하면
Hibernate:
create table MEMBER_PRODUCT (
Member_MEMBER_ID bigint not null,
products_id bigint not null
)
Hibernate:
create table Product (
id bigint not null,
name varchar(255),
primary key (id)
)
Hibernate:
alter table MEMBER_PRODUCT
add constraint FKc6hsxwm11n18ahnh5yvbj62cf
foreign key (products_id)
references Product
15:40:29.879 [main] DEBUG org.hibernate.SQL -
Hibernate:
alter table MEMBER_PRODUCT
add constraint FK4ibylolqmostllrjdc147aowv
foreign key (Member_MEMBER_ID)
references Member
15:40:29.882 [main] DEBUG org.hibernate.SQL -
중략 및 후략
양방향으로 만들고 싶으면
Product 가서
// 양방향으로 만들고 싶으면
@ManyToMany(mappedBy = "products")
private List<Member> members = new ArrayList<>();
이거 추가하면 됨.
다대다 매핑의 한계
다대다 한계 극복
실습
MemberProduct 생성
@Entity
@NoArgsConstructor
@Table(name = "ORDERS")
public class MemberProduct {
@Id
@GeneratedValue
private Long id;
private String name;
private int count;
private int price;
private LocalDateTime orderDateTime;
}
Product 에 이렇게 수정해주고
@OneToMany(mappedBy = "product")
private List<MemberProduct> memberProducts = new ArrayList<>();
Member도 수정
@OneToMany(mappedBy = "member")
private List<MemberProduct> memberProducts = new ArrayList<>();
그리고 MemberProduct 도 적절히 연결하면 됨
@ManyToOne
@JoinColumn(name = "MEMBER_ID")
private Member member;
@ManyToOne
@JoinColumn(name = "PRODUCT_ID")
private Product product;
이거 추가하면
MemberProduct 풀버전은
@Entity
@NoArgsConstructor
@Table(name = "ORDERS")
public class MemberProduct {
@Id
@GeneratedValue
private Long id;
private String name;
@ManyToOne
@JoinColumn(name = "MEMBER_ID")
private Member member;
@ManyToOne
@JoinColumn(name = "PRODUCT_ID")
private Product product;
private int count;
private int price;
private LocalDateTime orderDateTime;
}
한계 극복 방법은 2개 있다.
1. 연결 테이블에 PK를 묶어서 처리
두 개 묶어서 PK로 잡는데, 그러면서 각각을 동시에 FK로 묶는 방식
2. PK는 따로 하나 만들어서 잡아두고, 각각은 FK로만 사용하는 방식
이 방식을 더 추천, 이러면 나중에 유연성이 더 커진다.
728x90
반응형
'[개발] - Spring > JPA 공부' 카테고리의 다른 글
상속관계 매핑 (0) | 2023.08.23 |
---|---|
실습 3 - 다양한 연관관계 매핑 (1) | 2023.08.22 |
일대일 [1 : 1] (0) | 2023.08.21 |
일대다 [1 : N] (0) | 2023.08.20 |
다대일 [N : 1] (0) | 2023.08.20 |
Comments