2010-10-21 233 views
0

好吧我有一個一對多的父類和子類之間的映射。我可以保存父母,它會自動保存子對象,但問題是在父類上執行SELECT時。看來我正在爲數據庫表中的每個Child對象獲取一個Parent對象。 因此,如果我保存1個父對象與2個子對象,當我使用Hibernate選擇條件我得到2個父對象! 我只想讓Hibernate在Set子域中返回1個父對象及其2個子對象。JPA一對多查詢結果問題

我想我的映射必定是錯的。有人可以幫助這個嗎?

class Parent{ 
Long parentId; 
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL) 
@JoinColumn(name = "parent_table_id", nullable = false) 
Set childs; 
.... 
} 

class Child{ 
Long childId; 

} 

注: 「parent_table_id」 引用父主鍵。此值也不映射到任何Parent或Child對象。我手動插入此值,並只在@JoinColumn註釋中使用它。 好吧,我是新來這個JPA的東西,但似乎Hibernate會自動插入字段「parent_table_id」在Child表中的值,當我保存一個Parent與Child對象。 這可能導致問題?

+1

當您在條件查詢中執行內部連接時,如果未設置DISTINCT_ROOT_ENTITY,實際上會爲結果集中的每一行獲取一個對象。你的映射看起來很好,你可以建議發佈不符合你要求的查詢:) – Affe 2010-10-21 21:41:02

回答

1

你的映射看起來不錯,這聽起來像你真正需要的是:

criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); 

爲你進行內部連接的結果在不止一個結果排在條件查詢返回。

+0

是的,這實際上解決了我的問題。當我使用這些Hibernate.hbm.xml映射文件時,我不記得有這個問題。此外,前後生成的查詢是相同的!我猜想通過添加DISTINCT_ROOT_ENTITY Hibernate添加了一個過濾器來刪除重複的父對象。 – Marquinio 2010-10-21 23:39:32