2016-07-15 29 views
0

Ich habe folgendes Szenario:
Ich habe Probleme herauszufinden, was die Eigentümerseite ist und warum? Bitte können Sie helfen?Eigentümerseite mit JoinColumns Annotation

public class Basket 
{ 

... 

@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL) 
    @JoinColumns({@JoinColumn(name="BASKET", referencedColumnName="ID")}) 
    public Set<Product> getProductList() { 
     return this.productList; 
    } 
} 

public class Product 
{ 

@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.REFRESH) 
    @JoinColumns({@JoinColumn(name="BASKET", referencedColumnName="ID")}) 
    public Basket getBasket() { 
     return this.basket; 
    } 

} 
+0

Warum?'@JoinColumns ({@ JoinColumn (name = "BASKET", referencedColumnName = "ID")})' nur '@JoinColumn (name = "BASKET", referencedColumnName = "ID")' – Ice

+0

Ich weiß nicht, ich m versuchen, es Abbildung OIT als well..I dieses Kodeform andere geerbt – GionJh

Antwort

0

Korb ist die "eine" Seite der Beziehung und es gibt viele Produkte als Körbe identifiziert. So ist die "Eins" normalerweise der Elterncode und die Kinddatensätze verweisen auf die Eltern. In der Regel ist es am einfachsten, die Fremdschlüsseleinschränkung der Datenbank zu untersuchen (hoffentlich gibt es eine), die die Backing-Tabellen verbindet.

0

Ein Kunde hat einen Korbe und einen Korbe Ein Besitzer hat, so:

class Owner hat Korb in Relation @OneToOne.

Ein Korb hat viele Produkte, so:

class Basket hat Liste der Produkte in Bezug @OneToMany.

Viele Produkte haben einen Korbe so:

class Product hat Beziehung in @ManyToOne.

0

Der Extrakt aus der JPA 2.0 specification könnte Ihnen helfen, das Problem zu verstehen:

2.10.2Bidirectional ManyToOne/OneToMany Beziehungen

Unter der Annahme, dass:

Entity A references a single instance of Entity B. 
    Entity B references a collection of Entity A[21]. 

Entity Ein Eigentümer sein muss der Beziehung.

Die folgenden Standardeinstellungen Zuordnung gelten:

Entity A is mapped to a table named A. 
Entity B is mapped to a table named B. 

Tabelle A enthält einen Fremdschlüssel zu Tabelle B. Der Fremdschlüsselspalte Namen wie die Verkettung der folgenden gebildet wird: den Namen der Beziehung Eigenschaft oder ein Feld von Entität A; "_"; der Name der Primärschlüsselspalte in der Tabelle B. Die Fremdschlüsselspalte hat den gleichen Typ wie der Primärschlüssel der Tabelle B

Und in Abschnitt 11.1.21 wird wie folgt angegeben:

Wenn mehr als eine Join-Spalte vorhanden ist, muss eine JoinColumn-Annotation für jede Join-Spalte mithilfe der JoinColumns-Annotation angegeben werden. Sowohl der Name als auch die referencedColumnName-Elemente müssen in jeder solchen JoinColumn-Annotation angegeben werden.

In Ihrem Fall gibt es nur eine Join-Spalte. Sie müssen also nicht auf die @JoinColumns Annotation. Verwenden Sie einfach @JoinColumn. Die @JoinColumn Annotation wird immer auf der Besitzseite der Beziehung verwendet, das ist die @ManyToOne Seite in diesem Fall.

+0

dank, aber ich denke, dass das eine Tomany jener Anmerkungen wie in meinem Beispiel mit der Besitzer Seite, würde ich verstehen, warum mag? – GionJh

+0

Die OneToMany-Seite kann nicht der Eigentümer der Beziehung sein. Der Eigentümer ist immer derjenige, in den Sie Ihren Fremdschlüssel in die Datenbank eingeben. Sie können den Fremdschlüssel nicht auf die One-Seite legen. Wenn Sie dies tun, haben Sie mehrere Werte für den gleichen Datensatz in der Datenbank. Ich versuche nicht, dich zu überzeugen; Ich erzähle Ihnen nur, wie das Framework die Beziehung behandelt und wie die Datenbank entworfen werden sollte, wenn sie dem relationalen Datenbankparadigma entsprechen soll. – ujulu

+0

Es tut mir leid ich glaube nicht, dass Sie sich http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/ sind – GionJh