다양한 연관관계 매핑(3) - slahsk/study GitHub Wiki
중간에 연결 테이블을 추개해야 한다.
@Entity
public class Member{
@Id
@Column(name = "MEBMER_ID")
private String id;
private String username;
@ManyToMany
@JoinTable(name = "MEMBER_PRODUCT",
joinColumns = @JoinColumn(name = "MEMBER_ID"),
inverseJoinColumns = @JoinColumn(name = "PRODUCT_ID")
)
private List<Product> products = new ArrayList<>();
}
@Entity
public class Product{
@Id
@Column(name = "PRODUCT_ID")
private String id;
private String name;
}저장
Product productA = new Product();
productA.setId("productA");
productA.setName("상품A");
em.persist(productA);
Member member1 = new Member();
member1.setId("member1");
member1.setUsername("회원1");
member1.getProduct().add(productA);
em.persist(member1);PRODUCT 테이블 저장
MEMBER 테이블 저장
연관관계 때문에 MEMBER_PRODUCT 테이블도 저장한다.
탐색
Member member = em.find(Member.class, "member1");
List<Product> products = member.getProducts();
for(Product product : products){
System.out.println("product.name =" + product.getName());
}member.getProducts() 를 호출해서 상품 이름을 출력하면 product 정보를 조회하는 쿼리가 실행 된다.
@Entity
public class Product{
@Id
@Column(name = "PRODUCT_ID")
private String id;
private String name;
@ManyToMany(mappedBy = "products") //역방향
private List<Member> members;
}Member 는 같고 Product 에 @ManyToMany 추가 한다.
mappedBy 없는곳이 연관관계 주인이다.(외래 키를 가지고 있다.)