주문 및 주문 회선이 있다고 가정합니다. Order와 OrderLine 사이에 단방향 OneToMany를 갖도록 선택할 수 있습니다 (Order에는 OrderLine 컬렉션이 있습니다). 또는 OrderLine과 Order (OrderLine은 Order에 대한 참조가 있음)간에 ManyToOne 연관을 선택할 수 있습니다. 또는 두 가지를 모두 선택할 수 있습니다.이 경우 연결은 양방향 OneToMany/ManyToOne 연결이됩니다.
귀하가 선택하는 해결책은 주로 상황과 엔티티 간의 연결 수준에 따라 다릅니다. 예를 들어 사용자, 회사, 제공 업체 모두에 많은 주소가있는 경우 모든 주소와 주소 사이에 단방향을 사용하고 주소에 자신의 소유자를 알지 못하게하는 것이 좋습니다.
사용자와 메시지가있는 경우 사용자가 수천 개의 메시지를 가질 수 있다고 가정하면 메시지의 사용자에게 메시지를 거의 요구하지 않기 때문에 메시지에서 사용자까지 ManyToOne로만 모델링하는 것이 좋습니다. 어쨌든 사용자. JPQL 쿼리는 엔티티간에 연결을 통해 조인하므로 쿼리를 지원할 때만 연결을 양방향으로 만들 수 있습니다.
양방향 연관에서 개체 그래프에 일관성이없는 상황이 발생할 수 있습니다. 예를 들어, Order A에는 OrderLines의 빈 세트가 있지만 일부 OrderLines에는 Order A에 대한 참조가 있습니다. JPA는 항상 연관의 한면을 소유자면으로하고 다른면을 반대면으로 지정합니다. JPA는 반대면을 무시합니다. 소유자 측은 어떤 관계가 존재하는지 결정하는 측입니다. OneToMany 양방향 연관에서 소유자 측은 많은면이 있어야합니다. 앞의 예에서 소유자 측은 OrderLine이되며 JPA는 행과 A 사이의 연결을 유지합니다.
이러한 연결은 다음과 같이 매핑됩니다. 주문에
: OrderLine에있는
@OneToMany(mappedBy = "parentOrder") // mappedBy indicates that this side is the
// inverse side, and that the mapping is defined by the attribute parentOrder
// at the other side of the association.
private Set<OrderLine> lines;
: 또한
@ManyToOne
private Order parentOrder;