일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- KAKAOLOGINAPI
- Invalid bound statement (not found)
- 캐쉬가능
- 네이버 연결된 서비스
- org.apache.ibatis.binding.BindingException
- RFC723x
- HTTP3
- 김영한JPA
- 데이터베이스 방언
- http
- anyMatch
- HTTPMESSAGE
- 네이버로그인API
- SpringBoot
- @Entity
- initialDelay
- JPA
- DB방언
- ERROR TYPE : org.apache.ibatis.binding.BindingException
- gitrevert
- Git
- 멱등활용
- 자바ORM표준프로그래밍
- 무상태프로토콜
- gitreset
- 매핑정보가없는필드
- fixedDelay
- hibernate.dialect
- @Table
- Transaction not successfully started
Archives
- Today
- Total
twocowsong
다 대 다 : 양방향 본문
다대다 매핑이므로 역방향도 @ManyToMany를 사용합니다.
그리고 양쪽 중 원하는곳에 mappedBy로 연관관계의 주인을 지정합니다.
(mappedBy가 없는곳이 연관관계의 주인이 됩니다.)
@Entity
public class Product {
@Id
private String id;
private String name;
@ManyToMany(mappedBy = "products")
private List<Member> members;
}
다대다의 양방향 연관관계는 다음처럼 설정하면 됩니다.
member.getProducts().add(product);
product.getMembers().add(member);
위같은 상황에는 양방향 연관관계는 연관관계 편의 메소드를 추가해서 관리하는것이 편리합니다.
(그렇지 않으면 중간에 꼬이는 상황이 발생하게됩니다.)
다음처럼 회원 엔티티에 연관관계 편의 메소드를 추가해줍시다.
// 연관관계 편의 메소드
public void addProduct(Product product) {
// ...
products.add(product);
product.getMembers().add(this);
}
연관관계 편의 메소드를 추가했으므로 다음처럼 간단히 양방향 연관관계를 설정하면 됩니다.
member.addProduct(product);
양방향 연관관계로 만들었으므로 product.getMembers() 를 사용해서 역방향으로 객체 그래프를 탐색 할 수 있습니다.
public static void find(EntityManager em) {
Product product = em.find(Product.class, "productA");
List<Member> members = product.getMembers();
for (Member member : members) {
System.out.println("members : " + member.getUsername());
}
}
연관관계의 설정만으로도 Product엔티티를 조회해서 product의 id가 ProductA에 해당하는 Member엔티티정보를 모두 조회할수 있습니다.
'IT > JPA' 카테고리의 다른 글
다대다 : 새로운 기본 키 사용 (0) | 2022.06.27 |
---|---|
다 대 다 : 매핑의 한계와 극복, 연결 엔티티 사용 (0) | 2022.06.26 |
다 대 다 : 단방향 (0) | 2022.06.21 |
다 대 다 [N : N] (0) | 2022.06.20 |
대상 테이블에 외래 키 (0) | 2022.06.19 |