5

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

我发现这篇2 年前的文章表明这​​是不可能的。这是我尝试它的方法,但没有成功,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();
4

1 回答 1

8

不完全确定我是否遵循您的示例,但可以通过嵌套Criteria对象以形成树来在关联实体上指定过滤条件。例如,如果我有一个名为Order的实体,它与一个User实体具有多对一关系,我可以使用如下查询找到名为 Fred 的用户的所有订单:

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

If you're talking about an entity that has a relationship to itself, that should work as well. You can also replace "name" with "id" if you need to filter on the ID of an associated object.

于 2009-08-14T19:04:28.203 回答