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

我发现 本文 从两年前开始,这表明这是不可能的。以下是我尝试的方法,但没有成功,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();
有帮助吗?

解决方案

不完全肯定我按照你的榜样,但它肯定可以对相关的实体指定过滤条件,只需通过嵌套的标准对象以形成一棵树。举例来说,如果我有一个名为实体的订单有许多对一个关系到用户实体,我能找到的所有订单名为弗雷德与查询用户像这样:

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

如果你在谈论的是有对自身的关系的实体,应该正常工作。你也可以用“ID”替换为“名”,如果你需要在相关对象的ID过滤。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top