2009-10-30 41 views
0

我們有兩個表家庭和成員,這兩者之間的關係是家族有一組成員,但成員之間沒有任何家庭關係。如何使用加入休眠條件下面的情況

我想要使用dob和family的成員,因爲我使用的是Hibernate標準API,但我沒有得到如何編寫連接查詢,因爲成員沒有使用它的實例實例。所以不能使用FetchMode。任何其他方式來實現這一目標?

在此先感謝。 - Ravi Nikam。

+0

你不清楚你想要選擇什麼 - 個人會員/成員/家庭成員/列表上的成員集合?你能澄清嗎?此外,如果你可以發佈你的映射或至少描述它們,它會有所幫助。 – ChssPly76 2009-10-30 17:14:47

+0

是的,看到我想從數據庫中使用DOB和家族搜索會員。我希望單個匹配成員給予查詢結果頂部的給定家庭成員。使用HQL會很容易,如下所述,但我希望它通過標準,因爲我沒有家庭作爲成員的財產,我有一組成員在家庭。 – ravinikam 2009-11-02 07:37:25

回答

1

感謝你們,我與我的同事的一個解決這個作爲下

DetachedCriteria subquery = DetachedCriteria 
      .forClass(Family.class, "family") 
      .add(Expression.eq("family.id", family.getId())); 

       subquery.createAlias("members", "members") 
        .add(Restrictions.eqProperty("members.id", "m.id")) 
        .add(Expression.eq("members.DOB",Date)); 

       subquery.setProjection(Property.forName("members.id")); 

       Criteria crit = session.createCriteria(Member.class, "m") 
         .add(Subqueries.propertyIn("m.id", subquery)); 


      results = crit.list(); 

結果有會員我要求的清單。

1

,而不是試圖做

from Member m join m.family f where f.name = ? 

這是不可能的,你可以做完全相反的

select m from Family f join f.members m where f.name = ? 

我知道,這是HQL不是標準,但是這就是我更流暢用。儘管把這個HQL翻譯成標準應該是微不足道的。

+0

謝謝sfussenegger – ravinikam 2009-11-02 07:39:25