【问题标题】:Is it possible to search for same value on multiple columns with Hibernate Criteria?是否可以使用 Hibernate Criteria 在多个列上搜索相同的值?
【发布时间】:2010-07-26 08:01:23
【问题描述】:

我有许多可选参数的搜索查询,然后搜索搜索许多列的单词字段。是否可以为此目的使用休眠标准?我需要用相同的搜索词搜索许多列。

示例代码(无法正常工作的部分)

if(isNotEmpty(searchWord))
{
    criteria.add(Restrictions.like("description", searchWord));
    criteria.add(Restrictions.like("name", searchWord));
}

【问题讨论】:

  • 是的,这应该不是问题。但是 究竟是什么 不起作用?当您使用它时,您可能还想将“serachWord”重命名为“searchWord”。
  • 如果 name AND description 列中不包含搜索词,则不会返回任何结果。

标签: java hibernate criteria orm


【解决方案1】:

看起来你确实需要一个 OR:

Criterion description = Restrictions.like("description", searchWord);
Criterion name = Restrictions.like("name", searchWord);
LogicalExpression orExp = Restrictions.or(description, name);
criteria.add(orExp);

【讨论】:

  • +1 感谢这个,但它只允许两个值,所以我使用了 sql 限制。
  • 你好,这里是criteria.add(Restrictions.sqlRestriction("sql query here", values, types));我必须为类型传递什么。
【解决方案2】:

通过使用 Disjunction,我们添加了任意数量的列,最后将 Disjunction obj 添加到条件中。

Disjunction disCriteria = Restrictions.disjunction();
disCriteria.add(Restrictions.eq("name", searchWord));
disCriteria.add(Restrictions.eq("description", searchWord));
criteria.add(disCriteria);

【讨论】:

    【解决方案3】:

    我通过使用自定义 sql 限制解决了这个问题,示例如下:

    Object[] values = {  }; // values here
    Type[] types = {  }; // value types here
    criteria.add(Restrictions.sqlRestriction("sql query here", values, types));
    

    【讨论】:

      猜你喜欢
      • 2011-03-14
      • 2020-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-08
      • 2019-05-09
      • 1970-01-01
      相关资源
      最近更新 更多