【发布时间】:2012-03-17 19:58:10
【问题描述】:
我正在尝试获取表中列的最小值。这听起来微不足道,但我遇到了问题(我使用的是 MySql 5.1 数据库)。
情况有点复杂。 我们有一个由两个类实现的接口。 这两个类中的每一个都是从另外三个类扩展而来的。 这三个扩展器中的每两个都有休眠映射(基类也有映射)=>所以我们有 我实现的接口
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 中有三个值: 第一个为空,第二个为空,第三个包含我要查找的正确最小值。
我使用的是c.uniqueResult(),但它“返回”
org.hibernate.NonUniqueResultException: 查询没有返回唯一的 结果:3
我也试过用hibernate的
createQuery(select min(pollingTime) from tableName).list()
但结果是相同的(两个空值和一个正确的结果)。
我还尝试添加一个预定义的 ResultTransformer 以从列表中删除空值,但我失败了。
作为一种解决方法,我可以使用 sql 查询获得所需的最小值:
createSQLQuery("SELECT MIN(pool_time) FROM tableName")
这是目前唯一的解决方案。
你有什么想法为什么返回的结果不正确?
问候, 尼基
【问题讨论】:
标签: java hibernate null projection min