2013-07-19 54 views
0
table Student 
---------------- 
id | somecolumn with string| fk(which is self referencing ID of the same table) 

如何使hibernate查詢獲取id值匹配fk值的所有項目。休眠自引用表通過fk獲取行

這是我曾嘗試,但它不工作(它只返回1的結果,而不是結果集)

List<Student> list = (List<Student>) sessionFactory 
      .getCurrentSession() 
      .createQuery("from Student p join p.studentFKs p2 where p2.id = :parentId") 
      .setParameter("parentId", parentId).list(); 

有人可以幫我解決謎?我知道它也可以通過Hibernate標準來實現。

UPDATE答案是改變查詢(加入無效。):

select p from Student p join p.student p2 where p2.id = :parentId 
+0

你可以在這裏發佈你的實體類嗎? – Angga

+0

答案是更改查詢。不是通過哈希集合進行連接,而是通過相同的類類型進行連接,因爲它是自引用表。我更新了我的問題,並回答了 –

回答

0

我用這樣的事情,這是工作

實體學生裏面加入的

屬性:

@ManyToMany(cascade = CascadeType.REFRESH) 
private Set<Student> testJoins = new HashSet<Student>(); 

HQL獲取該集合:

select a.testJoins from Student a where a.id = :parentId 

也許你可以將你的查詢從p2.id = :parentId改爲 - >>p.id = :parentId

+0

我已經解決了問題,答案是將學生p的連接p.studentFKs p2中的查詢改爲p .id = parentId' to'select p from Student p join p。學生p2,其中p2.id =:parentId' –