2012-09-13 72 views
5

我是Hibernate的新手。我有兩個表格,例如studentphone number,這兩個表格有一個共同的列,student id。 我想用這兩個表使用Hibernate hql進行內部連接。Hibernate使用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; 
} 

回答

6

the documentation一次。您不應該在電話實體中擁有該學生的ID。相反,你應該有兩個實體之間的關聯:一個手機屬於學生:

public class Phone { 
    @Id 
    private Integer id; 

    private String phoneNumber; 

    @ManyToOne 
    private Student owner; 
} 

只有這樣,你可以使用聯接:

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

確定thanks..how我可以將執行比兩個表更是一回事嗎? ? –

+0

當然,您可以:例如,phone.owner.school.country.name ='USA'。這在優秀的Hibernate文檔中有解釋。閱讀。 –

+0

好的,謝謝..那麼我們如何迭代查詢結果中的多對多休眠..我會嘗試很多,但我無法實現它。 –

3

隨着兩班一樣,Hibernate是不知道,使生活困難的關聯。正常情況下,將電話類中的sid設置爲實際的Student對象,以便hibernate知道關聯。例如

class Phone { 
    @ManyToOne 
    @Column(name = "sid") 
    private Student student; 
} 

已經完成了這個,那麼你可以做一個簡單的HQL連接例如

FROM Phone p 
JOIN p.student s 

或者,如果有某種原因,你要在對象的原始ID,那麼你可以用「theta連接」,您明確指定像一個正常的SQL加入該協會。例如。

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

請找到下面的HQL :

SELECT * FROM學生ST INNER JOIN PHONENUMBER PN ON ST.id = PN.id其中ST.Name = 'XXXX'

+0

我得到這個錯誤:org。 hibernate.hql.ast.QuerySyntaxException:意外標記:ON在第1行第91列附近 – kozla13