Ich habe eine praktische Beziehung eingerichtet, in der eine Entität eine Eins-zu-viele-Beziehung mit einer anderen hat, und das hat eine Eins-zu-Eins-Beziehung mit einer anderen . So hat ein LISTING viele LISTING_LINE_ITEMS, und diese LISTING_LINE_ITEMS haben ein SERVICE_PERIOD, aber ein SERVICE_PERIOD hat viele LISTING_LINE_ITEMS. Ich habe versucht, diese Beziehung @JoinTable der Verwendung von JPA wie folgt zu beschreiben:JPA Inverse Join mit OneToMany verursacht Mehr als eine Zeile mit der angegebenen ID
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;
Die offensichtliche Ziel der Lage sein leicht erhalten Sie eine Liste von ServicePeriod
s für eine Listing
oder eine einzelne Listing
für eine ServicePeriod
. Derzeit ist die Art und Weise dies eingerichtet ist, ich eine Ausnahme bin immer:
org.hibernate.HibernateException: More than one row with the given identifier was found: 361951, for class: com.gonfind.entity.ServicePeriod
Ich glaube, das liegt daran, dass ein Eintrag ListingLineItems hat, die mit demselben ServicePeriod beziehen. Ich bin mir sicher, dass es einen Weg gibt, das zu erreichen, was ich will, aber ich weiß nicht, was es ist.
Sie sagen, dass viele Werbebuchungen die gleiche Serviceperiode haben können. Sie versuchen jedoch, die indirekte Beziehung von Auflistungen über Werbebuchungen zu Servicezeiträumen als Eins-zu-Viele und nicht als Viele-zu-Viele zu modellieren. Ist es daher richtig, daraus abzuleiten, dass hier eine zusätzliche Einschränkung besteht: Mehrere Werbebuchungen können der gleichen Serviceperiode zugeordnet sein, vorausgesetzt, dass sie alle derselben Auflistung * zugeordnet sind? –
@JohnBollinger ja, das ist richtig. – lmerry213
Hat jede Werbebuchung einen Servicezeitraum oder können Werbebuchungen ohne (null) Servicezeitraum vorhanden sein? –