2011-05-27 46 views
3

我在mySQL上使用Hibernate。在MySQL中,你可以把喜歡的查詢甚至數(如雙)參數和日期,例如,你可以這樣寫:Criterion限制條款和數字和日期

select * from sillytable where field like "3.33%" 

,這會工作。問題是我不能在使用限制條件的條件下做到這一點,實際上它會拋出一個異常,說它不能將一個字符串轉換爲日期或雙精度。

我該如何做到這一點?

回答

1

我發現唯一的好的解決方案,做我打算做的是使用HQL。 有一個在標準

0

我覺得這其實是:

x => 3.33 and x < 3.34 

在Hibernate是這樣的:

Restriction.between("field", 3.33, 3.34) 

之間被定義爲(min <= expr AND expr <= max)。所以上限必須改爲從3.33開始的最大值。 (警告:你可以有一個表示失敗,如果上限是不能表示3.34是representated與3.33999 ......你會如果你這個已經有效結合做函數nextafter錯過這一個值。)

Restriction.between("field", 3.33, Math.nextAfter(3.34, -Double.MAX_VALUE)); 
0
Criteria crit; 

try { 
    crit = session.createCriteria(sillytable.class, "st"); 
    crit.add(Restrictions.like("field", number + "%")); 
} 
+3

這是不是這樣,它不會如「工作字段「是例如日期(不知道數字,日期會更有用)。 – gotch4 2011-05-30 08:56:03

0

做到這一點沒有明確的方式,如果你仍然要堅持Hibernate標準使用Restrictions.sqlRestriction代替Restrictions.like下面的解釋:

Restrictions.sqlRestriction(" CAST({alias}.field AS CHAR) LIKE ('%" + number + "%')")