엔티티가 다른 엔티티와 일대 다 관계를 가지고 있고 다른 엔티티가 다른 엔티티와 일대일 관계를 가지고있는 편리한 관계를 설정했습니다 . 따라서 LISTING에는 LISTING_LINE_ITEMS이 (가) 많이 있으며 LISTING_LINE_ITEMS에는 SERVICE_PERIOD이 (가) 있지만 SERVICE_PERIOD에는 LISTING_LINE_ITEMS이 (가) 많이 있습니다.JPA Inverse Join with OneToMany 주어진 식별자를 가진 둘 이상의 행
LISTING
@OneToMany
@JoinTable (name = "LISTING_LINE_ITEM", joinColumns = @JoinColumn (name = "listing_id"), inverseJoinColumns = @JoinColumn (name = "service_period_id"))
Set<ServicePeriod> servicePeriods;
LISTING_LINE_ITEM
@ManyToOne (fetch = FetchType.EAGER)
@JoinColumn (name = "listing_id", nullable = false)
Listing listing;
@ManyToOne (fetch = FetchType.EAGER, cascade = CascadeType.PERSIST)
@JoinColumn (name = "service_period_id")
ServicePeriod servicePeriod;
SERVICE_PERIOD
@ManyToOne
@JoinTable (name = "LISTING_LINE_ITEM", joinColumns = @JoinColumn (name = "service_period_id"), inverseJoinColumns = @JoinColumn (name = "listing_id"))
Listing listing;
분명한 목표는 할 수있을 것입니다 다음과 같이 내가 JPA의 @JoinTable을 사용하여이 관계를 설명하기 위해 시도에 대한 ServicePeriod
의 목록을 쉽게 얻을 수 있습니다.또는 에 대한 단일 Listing
현재 방식이는 내가 예외를 받고 있어요 설정 :
org.hibernate.HibernateException: More than one row with the given identifier was found: 361951, for class: com.gonfind.entity.ServicePeriod
나는 목록이 같은 ServicePeriod를 참조 ListingLineItems을 가지고 있기 때문에 이것은 믿습니다. 나는 내가 한 일을 성취 할 수있는 방법이 있다고 확신하지만 그것이 무엇인지는 모른다.
많은 광고 항목에는 동일한 서비스 기간을 사용할 수 있지만 광고 항목을 통한 목록에서 서비스 기간으로의 간접 관계는 다 대다가 아닌 일대 다로 모델링하려고합니다. 여기에 추가 제약 조건이 있다고 추리하는 것이 맞습니까? 여러 광고 항목은 모두 동일한 서비스 기간과 연결될 수 있습니다 * 모든 항목이 동일한 목록과 연결되어 있으면 *? –
@JohnBollinger 예, 맞습니다. – lmerry213
모든 광고 항목에 서비스 기간이 있습니까, 아니면 (null) 서비스 기간이없는 광고 항목이있을 수 있습니까? –