2012-08-16 70 views
0

您好我有一個關於將簡單的SQL語句轉換爲java休眠限制的問題。Java標準限制列的總和低於值

SQL:

SELECT a + b FROM col WHERE a + b < 10 

當我嘗試將其轉換爲一個標準,我得到:

Criteria criteria = createCriteria(); 
criteria.createAlias("col","col").add(Restrictions.lt("a+b",10)); 

但好像串"a+b"是不能接受的。我該如何寫我的限制?

+0

應該工作..你使用的數據庫,創建自定義的標準是什麼? – 2012-08-16 11:24:51

+0

我有我自己的數據庫。但是,當我執行上面的腳本,我得到這個exeption:異常在線程「主」org.hibernate.QueryException:無法解析屬性:a + b:col – 2012-08-16 11:49:10

+0

我想喬是問你使用的數據庫服務器的味道。 MySQL的? PostgreSQL的?甲骨文? MS SQLServer? – theon 2012-08-16 12:41:31

回答

0

這可能是因爲Hibernate是爲了試圖解決A + B作爲你的實體的財產,你會得到

org.hibernate.QueryException: could not resolve property: a+b

有幾個可能的解決方案:

1:SQL限制:

//Hibernate 4.x 
criteria.add(Restrictions.sqlRestriction("col_a+col_b < ?", Integer.valueOf(10), org.hibernate.type.StandardBasicTypes.INTEGER); 

// Hibernate 3.x 
criteria.add(Restrictions.sqlRestriction("col_a+col_b < ?", Integer.valueOf(10),  org.hibernate.Hibernate.INTEGER); 

有一個問題,您必須使用列名稱而不是屬性名稱。

第二:公式:

添加到您的實體虛擬列使用@Formula註釋:

@org.hibernate.annotations.Formula("a + b") 
private int aSumB; 

,並把它作爲一個標準特性:

criteria.add(Restrictions.lt("aSumB", Integer.valueOf(10)); 

第三自定義標準:

如果您使用了很多考慮通過實施org.hibernate.criterion.Criterion