Hibernate的Criteria API是否仍然不支持嵌套关系

时间:2009-08-14 18:43:02

标签: java hibernate hibernate-criteria

我想使用Hibernate的Criteria API来准确地说出每个人所说的最可能的用例,应用复杂的搜索条件。问题是,我要查询的表不是完全由原始值组成,而是部分来自其他对象,我需要查询这些对象的id。

我发现2年前的this article表明这是不可能的。以下是我尝试无效的方法,还有Hibernate的其他方面,我知道字符串文字中支持这种点符号的位置,以指示对象嵌套。

   if (!lookupBean.getCompanyInput().equals("")) {
       criteria.add(Restrictions.like("company.company", lookupBean.getCompanyInput() + "%"));
   }

编辑:

这是我正确考虑的代码,用于完成我上面尝试的内容,使用下面第一个答案的建议;请注意,我甚至使用额外的createCriteria调用来对另一个关联的对象/表中的属性进行排序:

if (!lookupBean.getCompanyValue().equals("")) {
    criteria.createCriteria("company").add(
           Restrictions.like("company", lookupBean.getCompanyValue() + "%"));
}

List<TrailerDetail> tdList = 
        criteria.createCriteria("location").addOrder(Order.asc("location")).list();

1 个答案:

答案 0 :(得分:7)

我不完全确定我会按照您的示例进行操作,但只需将条件对象嵌套以形成树,就可以在关联实体上指定过滤条件。例如,如果我有一个名为订单的实体与用户实体具有多对一关系,我可以通过查询找到名为Fred的用户的所有订单像这样:

List<Order> orders = session.createCriteria(Order.class)
    .createCriteria("user")
        .add(eq("name", "fred"))
    .list();

如果您正在谈论与自身有关系的实体,那么这也应该有效。如果需要过滤关联对象的ID,也可以将“name”替换为“id”。

相关问题