das folgende einfache Schema Angenommen:Wie wird eine bidirektionale JPA-Beziehung mit einer abstrakten Klasse abgebildet?
Entity Tabelle - Attribute für alle Unternehmen
entityId, timeCreated,...
Kommentare Tabelle gemeinsam - einige Unternehmen haben eine Sammlung von diesen
entityId, commentId, commentText,....
Person Tabelle.
pensonId (entityId), firstName, lastName,...
Und die folgende Java Vererbungsstruktur:
BaseEntity - abstract - entity, join inheritance with a discriminator
CommentedEntity - abstract - introduces `comments` collection - mapping tbd
Person - concrete - entity - mapping trivial
Wie würden wir bidirektionale Beziehung zwischen CommentedEntity
und Comment
Karte? Der folgende Code ist meine beste Interpretation von Beispielen, die ich gefunden habe.
CommentedEntity
@OneToMany(mappedBy="owner", fetch=FetchType.EAGER)
private List<Comment> comments = new ArrayList<>();
Kommentar
@ManyToOne(fetch=FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name="entityId", referencedColumnName="entityId")
private CommentedEntity owner;
- Seit
CommentedEntity
eine abstrakte Klasse ist, das funktioniert nicht.owner
verweist auf eine unbekannte Entität. - Making
CommentedEntity
eine Entität, würde erfordern, dass es eine ID geben, so glaube ich nicht, dass Sinn macht. - Da mehrere konkrete Entitäten eine
comments
Auflistung haben, kann der Name der konkreten Entität nicht im Mapping verwendet werden.
Wie würden wir dann bidirektional eine person.commentList-Eigenschaft zuordnen?
Sie haben eine OneToMany in __Person__ across zu __Comment__ eingeben, aber keine Ahnung, was dieser Typ ist. Sie haben ein ManyToOne in __CommentedEntity__ zu __CommentedEntity__ ?! (meinst du __Person__?) Solange die Feldtypen konsistent sind und persistent (Entity oder MappedSuperclass), dann sollten Sie dies tun können (oder zumindest kann ich mit der Implementierung, die ich verwende) wie diese http: // www.datanucleus.org/products/accessplatform_4_2/jpa/orm/one_to_many_collection.html#join_bi –
Entschuldigung, Neil. Ich musste ein viel einfacheres Beispiel machen und habe einen Fehler gemacht. Die Frage bezieht sich auf bidirektionales Mapping zwischen 'CommentedEntity' und einem' Comment'. "Person" ist nicht im Spiel, da sie diese Zuordnung von ihrem übergeordneten Element erben würde. Entschuldigung für die Verwirrung. – jacekn
Ich habe mir den Link angesehen, den Sie angegeben haben. Mein Fall ist genauso wie der Account/Address One beim FK. Wo Sie konkret "Account" verwenden, müsste ich eine Zusammenfassung "CommentedEntity" einfügen. – jacekn