【问题标题】:combining 2 or more properties in Hibernate Restrictions criteria query在 Hibernate Restrictions 条件查询中组合 2 个或多个属性
【发布时间】:2014-08-28 11:09:19
【问题描述】:

我想对输入的字符串执行搜索操作。无论用户输入什么,它都应该搜索名字和姓氏列。

   //pseudo hql query
     Select   E.someproperty ....  from  Entity E    where   upper(E.firstName || '' || E.lastName)  like  upper(+userEntered+'%')  // 

在上面的代码中,我合并了两列并对其进行了搜索。我想要使​​用休眠标准的类似功能。 我尝试了以下查询,但它没有工作

 empCriteria.add(Restrictions.disjunction().add(Restrictions.ilike("firstName",  
   userEntered, MatchMode.START)).add(Restrictions.ilike("lastName", userEntered, 
MatchMode.START))); 

我知道这只是或条件..请告诉我有没有办法合并两列并使用条件查询进行搜索

【问题讨论】:

  • 什么“没用”?你可以说得更详细点吗?你所拥有的看起来是正确的。
  • 该条件查询分别检查两列和'ORing'结果。我想合并两列然后对其执行搜索操作。

标签: java hibernate


【解决方案1】:

Restrictions 无法做到这一点。

我强烈建议在 HQL 中执行此操作,而不是在 Criteria 实例中使用 SQL 限制。如果您开始使用 SQL,那么您将面临破坏可移植性的危险:Hibernate 的重点是将该层抽象掉。

更多详情请见this SO question

【讨论】:

    【解决方案2】:

    您可以在 SQL 子句中使用Resrtictions.sqlRestriction()

    【讨论】:

    • 这应该在评论而不是答案框中。请提供正确答案,否则将被删除。
    【解决方案3】:

    不可能那样做。由于您需要合并两列。所以请在 sqlRestrictions 中尝试。

    【讨论】:

      【解决方案4】:

      有一种方法,例如在你的映射hbm.xml文件中添加this(||在oracle中表示concat):

      <property name="completeName"
         formula="FST_NAME || ' ' || LAST_NAME"/>  
      

      只需在java bean中添加新的属性:

      private String completeName;
      public String getCompleteName() {
          return completeName;
      }
      public void setCompleteName(String completeName) {
          this.completeName = completeName;
      }
      

      finally 你可以在你的限制中得到这个串联:

      Criteria.add(Restrictions.like("completeName","%"+userEntered+"%").ignoreCase();
      

      ps:如果你是直接在java bean上映射我们这样的公式:

      @Formula(value="FST_NAME || ' ' || LAST_NAME")
      private String completeName;
      

      【讨论】:

      • 如果 ||不工作使用: concat(concat(FST_NAME, ' '), LAST_NAME)
      猜你喜欢
      • 2014-11-12
      • 2016-10-07
      • 1970-01-01
      • 2012-12-01
      • 2018-03-02
      • 2011-12-28
      • 1970-01-01
      • 1970-01-01
      • 2016-02-04
      相关资源
      最近更新 更多