2009-09-25 18 views
8

Ich habe Entity-Klassen A und C. Sie bilden die Tabellen tblA und tblC ab und haben eine Viele-zu-Viele-Beziehung zwischen ihnen, mit tblB zwischen ihnen zu mappen. tblB enthält A_ID, C_ID und SetDate, wobei das letzte das Datum ist, an dem es gesetzt wurde, also ein Attribut für die Beziehung. Meine Frage ist, wie kann ich dieses Attribut am besten zuordnen? Im Moment sind sie nicht zugeordnet, wie folgt aus:Attribute in Viele-zu-Viele-Beziehungen (Hibernate)

A:

@ManyToMany(targetEntity=C.class, cascade={ CascadeType.PERSIST, CascadeType.MERGE }) 
@JoinTable(name="tblB", [email protected](name="A_ID"), [email protected](name="C_ID")) 
private Collection<C> Cs; 

C:

@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE}, mappedBy = "Cs", targetEntity = A.class) 
private Collection<A> As; 

Wie sollte ich tblB.SetDate aus diesem?

Prost

Nik

+0

+1 interessante Frage – KLE

Antwort

10

Von dem, was ich weiß, ist es nicht möglich, um es auf diese Weise zu ordnen, müssen Sie wechseln zu One-To-Many und eine Viele-zu-eins-Beziehungen, mit Ihrem B in der Mitte. Ihr Datum ein Attribut von B. wird


Für diesen Mangel an evolutivity empfiehlt die Hibernate Dokumentation die Many-To-Many im Allgemeinen zu vermeiden, und verwenden Sie die beiden Beziehungen von Anfang an.

+1

Hallo, danke für deine Eingabe. Viele-zu-viele zu vermeiden und dabei die Anzahl der Entity-Klassen niedrig zu halten, ist möglicherweise nicht immer möglich, wenn man ältere Datenbanken abbildet, wie ich es jetzt mache. – niklassaers

+0

Ich muss auch mit den alten Datenbanken fertig werden! Ich teile auch deinen Wunsch, die Anzahl der Klassen niedrig zu halten. In diesem Fall, wenn Sie ein zusätzliches Feld benötigen, bin ich mir nicht sicher, ob Sie andere Optionen haben ... – KLE

3
+0

Natürlich könnte ich eine neue Entität hinzufügen, mit der erhöhten Menge an Code, aber ich möchte die Code-Ebene niedrig halten. Ich würde es vorziehen, nur ein Attribut zu der Beziehung hinzufügen, wenn es eine Möglichkeit gibt, das zu tun – niklassaers

+0

@niklassaers Ich denke, es gibt keinen Weg, aber wenn Sie es bekommen, teilen Sie es mit uns. Grüße, –

+0

Danke Arthur, werde ich. :-) – niklassaers