2013-05-02 120 views
1

我在實體之間有一對多的關係。做這件事時JPQL查詢:JPA/Hibernate重複記錄

SELECT父母從父父JOIN parent.child孩子WHERE ...

我得到重複的記錄時,父母有2個孩子,只有一個當父母有一個孩子,沒有時沒有孩子(沒有孩子沒事的時候沒有孩子)。請注意,SQL數據庫中沒有父項的重複項。

的實體聲明如下:

@Entity(...) 
public class Parent { 

    @Id 
    Long parentId; 

    @OneToMany(mappedBy = "parentID") 
    List<Child> children; 
} 

@Entity(...) 
public class Child {a 

    Long parentId; 
} 

我省略了很多爲了簡明的代碼,但應該給你什麼,我試圖做一個強烈的想法。請注意,關係是在父級方面定義的,因爲我需要從查詢返回的父母及其子女的列表。

+0

如果通過編輯您的文章 – Freakyuser 2013-05-02 15:20:19

+0

你如何堅持你的帖子的末尾添加問題這將是很好?級聯的父母和孩子堅持或你堅持每個實體分開。這將澄清很多事情。 – cinhtau 2013-05-02 15:52:04

+0

Freakyuser,我認爲是顯而易見的,我的問題是從我的查詢重複。 – user2343647 2013-05-02 17:18:17

回答

1

您可以通過使用關鍵字DISTINCT擺脫重複的:

SELECT DISTINCT parent FROM Parent parent JOIN parent.child child WHERE ... 

編輯:DISTINCT關鍵字用於remoe從查詢結果重複不管德之所以這些重複的存在。有時候,原因是重複的數據庫條目。但更常見的情況是,重複項是JOIN聲明的後果,因此您的用例完全合法。

但是,通過將關係設爲雙向,您可以避免顯式連接和DISTINCT關鍵字。然後你可以使用隱式連接通過導航:

SELECT parent FROM Parent parent WHERE parent.children... 
+0

謝謝,它工作,但我認爲DISTINCT關鍵字是爲了消除數據庫中存在的重複項,而不是查詢生成的重複項。 – user2343647 2013-05-02 17:17:10

+0

@ user2343647 - 不客氣:)我添加了一些更多信息 - 請參閱編輯 – kostja 2013-05-02 18:14:39