2012-10-11 49 views
1

在我的數據庫中有一列是「年」,它是一個整數。休眠標準API條件「like」整數

如何使用Criteria API(而不是HQL)來搜索哪些記錄包含,例如年份列中的「196 ...」?

我覺得應該是Restrictions.like,但我得到異常:

SEVERE: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer 

回答

5

更好更快的解決方案是使用Criterion.sqlRestriction(String sql)。您可以將sql形成爲「to_char(year)like '19%'」,注意to_char是數據庫特定的。我不認爲JPA支持to_char函數。

+0

而使用此時不要忘記轉義字符(以防止SQL注入)! – acdcjunior

+0

另一個問題是我有連接的表和兩個表都有「年」列,在這種情況下它再次引發錯誤。 –

5

其實,除了要告訴你,你需要的一切。你的情況下的Restrictions.like正在尋找一個整數,但得到一個字符串作爲參數。 (你應該公佈了使用的Restrictions.like的確切電話)。

儘管如此,還是有一個Restrictions.between方法。你可以用它來解決你的問題。例如:

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

還有其他的方法。整數可以與Restrictions.le(小於或等於),Restrictions.lt(小於),Restrictions.gt(大於),Restrictions.ge(大於或等於)相比較。