【问题标题】:How to use join in hibernate criteria following situation在以下情况下如何在休眠条件中使用连接
【发布时间】:2009-10-30 12:52:52
【问题描述】:

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

我想使用 dob 和 family 获取成员,因为我正在使用 Hibernate 标准 API,但我不知道如何编写联接查询,因为成员没有 Family 实例。所以无法使用 FetchMode。还有其他方法可以实现这一目标吗?

提前致谢。 - 拉维尼卡姆。

【问题讨论】:

  • 不太清楚您要选择什么 - 个人成员/成员列表/带有成员集合的家庭?你能澄清一下吗?另外,如果您可以发布您的映射或至少更好地描述它们,那将会有所帮助。
  • 是的,我想从数据库中搜索使用 DOB 和家庭的成员。我想要给定家庭的单个匹配成员,无论谁是查询结果的顶部。使用 HQL 会很容易,如下所述,但我希望它通过标准,因此我没有家庭作为成员的财产,而是在家庭中有一组成员。

标签: java hibernate criteria


【解决方案1】:

而不是尝试去做

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

这是不可能的,你可以做完全相反的事情

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

我知道,这是 HQL 而不是 Criteria,但这就是我更熟悉的内容。不过,将这个 HQL“翻译”为 Criteria 应该是微不足道的。

【讨论】:

    【解决方案2】:

    谢谢你们,我已经和我的一位同事解决了这个问题

    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();
    

    results 有我请求的成员列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-16
      • 1970-01-01
      相关资源
      最近更新 更多