2012-09-13 6 views
5

Ich bin neu in Hibernate. Ich habe zwei Tabellen, z.B. student und phone number, und diese beiden Tabellen haben eine gemeinsame Spalte student id. Ich möchte eine innere Verbindung mit diesen beiden Tabellen mit Hibernate hql machen.Hibernate innere Verbindung mit hql

student.java

{ 
    private int id; 
    private String name; 
} 

phone.java

{ 
    private int pid; 
    private int sid; //same id in student.java 
    private int phone_number; 
} 

Antwort

6

the documentation erneut lesen. Sie sollten nicht die ID des Studenten in der Phone-Entität haben. Vielmehr sollen Sie eine Verbindung zwischen den beiden Einheiten haben: ein Telefon gehört zu einem Student:

public class Phone { 
    @Id 
    private Integer id; 

    private String phoneNumber; 

    @ManyToOne 
    private Student owner; 
} 

Nur dann werden Sie in der Lage sein, schließt sich zu verwenden:

// selects all the phones belonging to the students named 'John' 
select phone from Phone phone where phone.owner.name = 'John' 
+0

ok thanks..how 'XXXX' kann ich die gleiche Sache mehr als zwei Tabellen durchführen? ? –

+0

Natürlich können Sie: wo phone.owner.school.country.name = 'USA' zum Beispiel. Dies wird in der ausgezeichneten Hibernate-Dokumentation erklärt. Lies es. –

+0

ok thanks..then wie können wir die Abfrage Ergebnisse für eine viele zu viele Beziehungen im Ruhezustand iterieren .. Ich werde viel versucht.Aber ich kann es nicht erreichen. –

3

Mit den beiden Klassen wie das Hibernate nicht bewusst des Vereins ist es, das Leben schwer macht. Was normal wäre, ist, die Sid in der Telefonklasse zu einem tatsächlichen Student-Objekt zu machen, so dass Hibernate die Assoziation kennt. z.B.

Nachdem Sie dies getan haben, können Sie eine einfache HQL-Verbindung durchführen, z.

FROM Phone p 
JOIN p.student s 

Alternativ, wenn es aus irgendeinem Grund ist, dass Sie die Roh-ID im Objekt wollen, dann können Sie eine „Theta-Join“ verwenden, in denen Sie explizit die Zuordnung wie eine normale SQL Join festlegen. Z.B.

FROM Phone p, Student s 
WHERE p.sid = s.id 
-3

Nachfolgend finden Sie die HQL :

SELECT * FROM Student JOIN ST INNER Telefonnummer PN ON ST.id = PN.id wo ST.Name =

+0

Ich erhalte diesen Fehler: org. hibernate.hql.ast.QuerySyntaxException: unerwartetes Token: ON nahe Zeile 1, Spalte 91 – kozla13