Ich habe eine kartiert Einheit wie folgt:Ist @ManyToMany (mappedBy = ...) + @OrderColumn von der JPA unterstützt?
@Entity
@Table(name = "Groups")
@IdClass(value = GroupId.class)
public class Group implements Serializable
{
@Id
@Column(name = "round_id")
private Integer roundId;
@Id
@Column(name = "ordinal_nbr")
private Integer ordinalNbr = 0;
...
}
Es hat einen zusammengesetzten Schlüssel (round_id, ordinal_nbr)
die Reihenfolge der Gruppen in einer Runde anzuzeigen.
Nun stellen Sie eine Tabelle Einheiten verbinden enthält, die die geordneten Gruppen über eine Selbstbezug verknüpfen (von Gruppe zu Gruppe):
CREATE TABLE GroupLinks
(
parent_round_id INTEGER NOT NULL,
parent_ordinal_nbr SMALLINT NOT NULL,
child_round_id INTEGER NOT NULL,
child_ordinal_nbr SMALLINT NOT NULL,
PRIMARY KEY (parent_round_id, parent_ordinal_nbr, child_round_id, child_ordinal_nbr),
FOREIGN KEY (parent_round_id, parent_ordinal_nbr) REFERENCES Groups (round_id, ordinal_nbr),
FOREIGN KEY (child_round_id, child_ordinal_nbr) REFERENCES Groups (round_id, ordinal_nbr)
);
Ich weiß, es ist möglich, @ManyToMany
+ @JoinTable
+ @OrderColumn
für die besitzende Einheit zur Karte (je nachdem, was ich wählen?):
@ManyToMany
@JoinTable(name = "GroupLinks", joinColumns = {@JoinColumn(name = "parent_round_id", referencedColumnName = "round_id"), @JoinColumn(name = "parent_ordinal_nbr", referencedColumnName = "ordinal_nbr")}, inverseJoinColumns = {@JoinColumn(name = "child_round_id", referencedColumnName = "round_id"), @JoinColumn(name = "child_ordinal_nbr", referencedColumnName = "ordinal_nbr")})
@OrderColumn(name = "child_ordinal_nbr")
private List<Group> children;
Frage:
Wird für die eigene Seite auch die umgekehrte Beziehung @ManyToMany(mappedBy = ...)
mit einer @OrderColumn
unterstützt?
Definiert die JPA 2 Spezifikation, um dies zu erlauben oder zu leugnen?
Dank
Update 1:
Die oben ist im Wesentlichen eine Graphenstruktur. Hier ein Beispiel:
Die GroupLinks
Tabelle enthält die Box-Einheiten. Wenn nur die Entität B2 Group
betrachtet wird, enthält die Liste parents
(a,1,b,2)
und (a,2,b,2)
. Wie für die children
Liste wird es (b,2,c,1)
, (b,2,c,2)
und (b,2,c,3)
enthalten.
Wie Sie die Einheiten in den Listen der B2
sehen können nicht kollidieren, so sollte ein @OrderColumn
in Ordnung arbeiten für beiden Beziehungenparents
und children
- zumindest in der Theorie. Aber was ist die Praxis hier (JPA)?
Beachten Sie, dass das einfache Ausprobieren von Hibernate und/oder EclipseLink nicht wirklich die Frage beantwortet, ob die JPA 2-Spezifikation oder ein JPA-kompatibler Anbieter dieses Szenario unterstützen soll oder muss.
Update 2:
die obigen Zuordnungen auf der Ruhe Ergebnisse in der folgenden Abbildung Ausnahme Versuch:
Caused by: org.hibernate.MappingException: Repeated column in mapping for collection: com.kawoolutions.bbstats.model.Group.parents column: parent_ordinal_nbr
at org.hibernate.mapping.Collection.checkColumnDuplication(Collection.java:340)
at org.hibernate.mapping.Collection.checkColumnDuplication(Collection.java:363)
at org.hibernate.mapping.Collection.validate(Collection.java:320)
at org.hibernate.mapping.IndexedCollection.validate(IndexedCollection.java:89)
at org.hibernate.cfg.Configuration.validate(Configuration.java:1291)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1729)
at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:84)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:904)
... 9 more
die @OrderColumn
für parent_ordinal_nbr
Ergebnisse in der gleichen Ausnahme für die children
Beziehung Entfernen . Es sieht so aus, als ob Hibernate Ordnungsspalten, die auch in Fremdschlüsseln verwendet werden, nicht mag.
Update 3:
Getestet mit Eclipse auf Glassfish ... das funktioniert, keine Zuordnung Ausnahmen.
Dies wirft zwei Fragen Followup:
- Ist die PPV nicht zulassen Fremdschlüssel, um Spalten? Es macht keinen Sinn für mich, warum sie nicht einfach funktionieren sollten ...
- Ist das ein Hibernate Bug?
Was auch immer der Zustand eines Unternehmens bedeutet ... Followup Frage ist hier: http://stackoverflow.com/questions/10054400/jpa-ordercolumn-and- sichtbarer Zustand einer Einheit – Kawu
Gute Erklärung. Zeigt wirklich den Unterschied zwischen OrderColumn und OrderBy. +1 –