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