1

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

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

我认为应该是Restrictions.like,但我有例外:

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

4

2 回答 2

5

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

于 2012-10-11T15:11:14.693 回答
5

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

不过还是有Restrictions.between方法的。你可以用它来解决你的问题。例如:

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

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

于 2012-10-11T14:34:28.647 回答