我試圖得到一個表中的列的最小值。這聽起來微不足道,但我遇到問題(我正在使用MySql 5.1數據庫)。休眠Projections.min()返回了多行
的情況有點複雜。 我們有一個從兩個類實現的接口。 這兩個類別的每一個都從另外三個類別擴展而來。 每兩根這三個extendors的具有休眠映射(基類還具有映射)=>所以我們有 接口I由
實施CLASSA(映射)由classA1(映射),classA2(映射)擴展, classA3通過classB1(映射), classB2(映射),classB3(未映射)
下面是一個例子代碼問題伸展(未映射)CLASSB(映射):
Criteria c = getSession().createCriteria(samplesType)
.setProjection(Projections.min("pollingTime"));
List resultList= c.list()`enter code here`;
的.LIST()執行後有三個值中resultList: 首先爲空,其次爲null,第三個包含我正在尋找正確的最小值。
我用c.uniqueResult()
但 「收益」
org.hibernate.NonUniqueResultException:查詢未返回唯一結果 :3
我也試着使用Hibernate的
createQuery(select min(pollingTime) from tableName).list()
但結果是一樣的(兩個空值和一個正確的結果)。
我也嘗試添加預定使用ResultTransformer以從列表中刪除空值,但我失敗了。
作爲一種變通方法,我可以使用SQL查詢得到所需要的最低值:
createSQLQuery("SELECT MIN(pool_time) FROM tableName")
這是當下唯一的解決辦法。
你有什麼想法,爲什麼返回的結果是不正確的?
問候, 尼基
事實上,這是我直接用MySQL查詢瀏覽器檢查的第一件事情之一。此欄中沒有任何空值。 考慮到該列不是唯一鍵並且沒有設置爲無效,這是一個很好的觀點。 Niki 編輯:我也同意最好找出爲什麼我得到空值而不是找到一種方法來從結果中篩選它們。 – user1228603 2012-02-28 11:38:29
我也試過下面的代碼。 String qryStr =「select min(tn.pollingTime)from」+ tableName +「tn where tn.pollingTime!= NULL」; List resultList = getSession()。createQuery(qryStr).list(); 列表中的結果現在顛倒過來: minValue,null,null。 它看起來,只要我使用休眠(查詢,creteria,投影等)爲這個任務它返回錯誤的結果。 – user1228603 2012-02-28 13:31:38