我正在尝试获取表中一列的最小值。这听起来很简单,但我遇到了问题(我正在使用MySql 5.1数据库)。
情况有点复杂。 我们有一个由两个类实现的接口。 这两个类中的每一个都是从另外三个类扩展而来的。 这三个扩展器中的每两个都有hibernate映射(基类也有映射)=> 所以我们有 接口I实现:
classA(mapped) 扩展自 classA1(mapped) , classA2(mapped) , classA3(not mapped) classB(mapped) 扩展自 classB1(mapped) , classB2(mapped) , classB3(not mapped)
这里是一个带有示例代码的问题:
Criteria c = getSession().createCriteria(samplesType)
.setProjection(Projections.min("pollingTime"));
List resultList= c.list()`enter code here`;
执行.list()后,resultList中有三个值:第一个是null,第二个是null,第三个包含我要查找的正确最小值。
我曾经使用
c.uniqueResult()
,但它会“返回”
我还尝试使用Hibernate的org.hibernate.NonUniqueResultException:查询未返回唯一结果:3
createQuery(select min(pollingTime) from tableName).list()
但结果仍然相同(两个空值和一个正确的结果)。
我也尝试添加预定义的ResultTransformer来从列表中删除空值,但失败了。
作为解决方法,我可以使用SQL查询获取所需的最小值:
createSQLQuery("SELECT MIN(pool_time) FROM tableName")
目前来看,这是唯一的解决方案。
你有什么想法,为什么返回结果不正确吗?
祝好, Niki