ORM: OneToOne mapping auf Non-Primary-Key Join-Spalte - Buch und Inventar zugeordnet ISBN
Habe ich ein Buch Modell-und Inventory-Modell abgebildet, indem die ISBN-Nummer, aber die ISBN ist nicht der Primärschlüssel in beiden. Bücher gehören zu den Buchhandlungen und Inventar wird für eine Gruppe von Buchhandlungen(BookstoreChain). Inventar ist geteilt durch alle Buchhandlungen Zugehörigkeit zu einer BookstoreChain.
Ich bin mit Hibernate @OneToOne mapping auf die Buch Seite zu Holen, Inventar-info durch den Beitritt der ISBN-Spalte. Irgendwie, Hibernate generiert die left outer join-Abfrage korrekt, aber Bestand ist null auf dem Buch-Objekt. Sein nicht faul, geladen, entweder. Ignorieren die Buchhandlung und Kette, wie mache ich eine OneToOne oder ManyToOne-und join-fetch-Inventar, wenn Bücher geholt?
class Book{
@Id
Long id
@Column
String isbn;
@Column
String title;
@OneToOne(optional = true)
@JoinColumn(name = "isbn", referencedColumnName = "isbn",insertable = false, updatable = false)
Inventory inventory;
}
class Inventory{
@Id
Long id
@Column
String chainId
@Column
String isbn
@Column
Long availableQty
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie name, Ihre join-Verweis etwas anderes. isbn ist bereits eine Spalte. Versuchen Sie dies:
Ich bezweifle, dass das irgendetwas damit zu tun hat mit dem Thema, aber ich dachte, ich würde bringen Sie es sowieso nur, um sicherzustellen, dass es nicht eine gotcha, die übersehen wurde:
Referenz: [http://docs.jboss.org/ejb3/app-server/HibernateAnnotations/reference/en/html_single/index.html%5D%5B1%5D
Ich weiß, Sie sagten, dass der LEFT-OUTER-JOIN erzeugt wird, aber ich dachte, dass die default-fetch FAUL war, wenn es nicht angegeben wurde. Vielleicht, explicilty Angabe des fetch-Modus können unterschiedliche Ergebnisse liefern.
Schließlich, wenn Sie mit einer HQL-Abfrage, vielleicht posten, die mit anderen entity-Klassen wird der Gemeinschaft helfen, helfen, das Problem zu beheben.
Ihre Datenbank-schema nicht sinnvoll ist, basierend auf dem, was Sie hier gezeigt haben. Die Beziehung zwischen Buch und Bestandsaufnahme sollte eine viele - vermutlich die selben Buch ist in mehrere Bestände, das heißt, Sie können nicht zuordnen, Bücher und Vorräte, nur mit der isbn. Da die isbn nicht eindeutig über die Vorräte haben, müssen Sie mehrere Zeilen im Inventar mit derselben isbn, aber unterschiedliche chainIds - in welcher Zeile ist die richtige Zeile für ein bestimmtes Buch/isbn? Buch sollte ein Fremdschlüssel zum Inventar.id, nicht Bestand.isbn.
nur eine Vermutung: kommt name = 'ISBN' muss der gleiche Fall, da das Feld im Inventar?