2009-10-30 92 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