2012-05-29 7 views
7

Ich benutze das PlayFramework und ich mag es wirklich. Wenn ich aus einer Tabelle Daten greifen will, zum Beispiel habe ich eine user Tabelle, verwende ich die folgende Syntax:Komplexe Joins mit Play Framework und Ebean

List<User> users = User.find.where().eq("email", email).findList(); 

Meine Frage, dass, wenn ich das Benutzerobjekt erhalten, ich habe eine id Spalte. Mit diesem id Wert kann ich anderen Tabellen zuordnen und die id 's dieser Tabellen können noch mehr Tabellen zugeordnet werden, so Grundkonzept der Verknüpfung über mehrere Tabellen. Gibt es ein Beispiel oder einen Ort, den ich lesen kann, wo es beschreibt, wie man das mit der obigen Syntax implementiert?

Ich habe versucht, mich selbst zu finden und konnte nicht, nur so kann ich an diesem Punkt daran denken, gerade SQL mit vorbereiteten Aussagen zu verwenden, die ich lieber nicht machen würde.

Antwort

16

ellou‘kalvish

Relationships zwischen Modellen mit gemeinsamen JPA Annotationen wie @OneToMany gesetzt sind, @ManyToOne, @OneToOne usw.

Also, wenn Sie User.java Modell für Benutzertabelle und Question.java Modell für Benutzer-Frage haben, können Sie verbinden sie mit @OneToMany (Ein User hat viele Question s)

Benutzer

@Entity 
public class User extends Model { 
    @Id 
    public Long id; 

    public String email; 

    @OneToMany 
    public List<Question> questions; 
} 

Frage

@Entity 
public class Question extends Model { 
    @Id 
    public Long id; 

    public String question; 
} 

Wenn Sie einen Benutzer in der Steuerung wählen werden, wird Ebean ausführen ‚schließt sich‘ standardmäßig und werden alle Benutzer-Fragen und holen:

User user = User.find.where().eq("email", email).findUnique(); 
List<Question> usersQuestion = user.questions; 

standardmäßig Ebean ruft alle Eigenschaften und Beziehungen des Objekts ab, sodass Sie keine Unterabfragen erstellen müssen. Natürlich können oder sollten Sie nur die Daten auswählen, die gerade benötigt werden.

Am official Ebean documentation page Sie recht gut Reference Guide finden (pdf), allgemeine Beschreibung der Beziehung in Abschnitt 11.6.2 Relationships zur Verfügung steht.

In Abschnitt 4.1.2 Query gibt es beispielsweise (zweite), die zeigt, wie ein „partielles“ Objekt mit der Verwendung von select() und fetch()

+1

Hallo Marcus, Vielen Dank für Ihre Antwort zu bekommen. Ich habe mir gerade das Handbuch angeschaut, und ich frage mich, ob ich Ihnen eine Frage stellen könnte ... Abschnitt 4.1.5 beschreibt die OneToMany, ManyToOne usw. Aber woher weiß es, welche Spalten zugeordnet sind? Angenommen, ich habe eine Spalte "myId" und diese wird einer Spalte "id" in einer anderen Tabelle zugeordnet. Gibt es eine Möglichkeit, dies zu spezifizieren? – KVISH

+0

Ebean ist genug Cleaver, um bei Änderung des Modells eine geeignete DDL zu erzeugen. Vorsicht vor diesem Fall, aber es ist wirklich eine gute Idee, ein anderes Testprojekt zu erstellen und es direkt von Ebean zu lernen – biesior

+0

@KVISH Ich denke, was Sie suchen, ist die JPA Annotation @ JoinColumn, wo Sie den Namen der Join-Spalte angeben können benutzen. –