我试图得到一个表中的列的最小值。这听起来微不足道,但我遇到问题(我正在使用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