У меня есть удобное отношение, в котором сущность имеет отношения «один ко многим» с другим и имеет много-к-одному с другим , Таким образом, у LISTING есть много LISTING_LINE_ITEMS, а те LISTING_LINE_ITEMS имеют один SERVICE_PERIOD, но SERVICE_PERIOD имеет много LISTING_LINE_ITEMS. Я попытался описать эту связь, используя @JoinTable JPA, как показано ниже:JPA Inverse Присоединиться к 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;
Очевидная цель состоит в том, чтобы иметь возможность легко получить список ServicePeriod
s для Listing
или один Listing
для ServicePeriod
. В настоящее время способ это установить, я получаю исключение:
org.hibernate.HibernateException: More than one row with the given identifier was found: 361951, for class: com.gonfind.entity.ServicePeriod
Я считаю, что это происходит потому, что перечисление имеет ListingLineItems, которые относятся к одной и той же ServicePeriod. Я уверен, что есть способ добиться того, что мне нужно, но я не знаю, что это такое.
Вы говорите, что многие позиции могут иметь одинаковый период обслуживания, но вы пытаетесь моделировать косвенную связь между листингами по позициям и периодам обслуживания как «один ко многим», а не «многие ко многим». Правильно ли тогда заключить, что существует дополнительное ограничение: несколько позиций могут быть связаны с одним и тем же периодом обслуживания * при условии, что все они связаны с одним и тем же листом *? –
@JohnBollinger да, это правильно. – lmerry213
Имеет ли каждая позиция период обслуживания или могут быть позиции без периода (нулевого) обслуживания? –