在我的数据库中,我有一列“年份”,它是一个整数。
如何使用 Criteria API(不是 HQL)搜索哪些记录包含,例如年份列中的“196 ...”?
我认为应该是Restrictions.like
,但我有例外:
严重:java.lang.ClassCastException:java.lang.String 无法转换为 java.lang.Integer
更好更快的解决方案是使用 Criterion.sqlRestriction(String sql)。您可以将 sql 形成为“to_char(year) like '19%'”,请注意 to_char 是特定于数据库的。我不认为 JPA 支持 to_char 函数。
实际上,异常应该告诉你你需要的一切。在Restrictions.like
您的情况下,正在寻找一个整数,但得到一个字符串作为参数。(您应该已经发布了Restrictions.like
使用的确切呼叫)。
不过还是有Restrictions.between
方法的。你可以用它来解决你的问题。例如:
criteria.add(Restrictions.between("year", 1960, 1970));
还有替代方法。整数可以与Restrictions.le
(小于或等于)、Restrictions.lt
(小于)、Restrictions.gt
(大于)、Restrictions.ge
(大于或等于)进行比较。