在我的数据库中,我有一个“year”列,它是一个整数。
如何使用Criteria API(而不是HQL)搜索哪些记录包含,例如年份列中的“196 ...”?
我认为它应该是Restrictions.like
,但我得到了例外:
SEVERE: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
(大于或等于)进行比较。