【问题标题】:Hibernate Criteria API condition "like" with integerHibernate Criteria API 条件“喜欢”整数
【发布时间】:2012-10-11 14:09:21
【问题描述】:

在我的数据库中,我有一列“年份”,它是一个整数。

如何使用 Criteria API(而不是 HQL)搜索哪些记录包含,例如年份列中的“196...”?

我认为应该是Restrictions.like,但我遇到了异常:

严重:java.lang.ClassCastException:java.lang.String 无法转换为 java.lang.Integer

【问题讨论】:

    标签: string hibernate integer sql-like criteria


    【解决方案1】:

    更好更快的解决方案是使用 Criterion.sqlRestriction(String sql)。您可以将 sql 形成为“to_char(year) like '19%'”,请注意 to_char 是特定于数据库的。我不认为 JPA 支持 to_char 函数。

    【讨论】:

    • 并且在使用时不要忘记转义字符(以防止 SQL 注入)!
    • 另一个问题是我有表连接,两个表都有“年”列,在这种情况下它再次抛出错误。
    【解决方案2】:

    实际上,异常应该告诉你你需要的一切。在您的情况下,Restrictions.like 正在寻找一个整数,但得到一个字符串作为参数。 (您应该已经发布了使用的Restrictions.like 的确切呼叫)。

    尽管如此,还是有一个Restrictions.between 方法。你可以用它来解决你的问题。例如:

    criteria.add(Restrictions.between("year", 1960, 1970));
    

    还有其他方法。整数可以与Restrictions.le(小于或等于)、Restrictions.lt(小于)、Restrictions.gt(大于)、Restrictions.ge(大于或等于)进行比较。

    【讨论】:

      猜你喜欢
      • 2010-12-23
      • 1970-01-01
      • 1970-01-01
      • 2011-05-11
      • 2021-05-29
      • 2016-06-30
      • 2015-10-25
      • 1970-01-01
      相关资源
      最近更新 更多