如何使用hibernate条件加入以下情况

时间:2009-10-30 12:52:52

标签: java hibernate criteria

我们有两个表Family和Member,这两者之间的关系是Family有一组成员,但成员中没有任何家庭关系。

我希望使用dob和family获取成员,因为我正在使用Hibernate条件API,但我没有得到如何编写连接查询,因为成员没有使用Family实例。所以无法使用FetchMode。有没有其他方法来实现这一目标

提前谢谢。 - Ravi Nikam。

2 个答案:

答案 0 :(得分: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“翻译”为Criteria应该是微不足道的。

答案 1 :(得分: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();

结果包含我要求的成员列表。