我正在尝试获取表中列的最小值。这听起来微不足道,但我遇到了问题(我正在使用MySql 5.1数据库)。
情况有点复杂。我们有一个接口,它是由两个类实现的。这两个类的每一个都是从另外三个类扩展而来的。这三个扩展器中的每两个都有hibernate映射(基类也有映射) =>,所以我们有一个接口I
classA(映射)由classA1(映射)、classA2(映射)、classA3(未映射)classB(映射)扩展(映射)、classB2(映射)、classB3(未映射)扩展
下面是一个示例代码的问题:
Criteria c = getSession().createCriteria(samplesType)
.setProjection(Projections.min("pollingTime"));
List resultList= c.list()`enter code here`;在执行.list()之后,resultList中有三个值:第一个是null,第二个是null,第三个是我想要的正确的最小值。
我使用的是c.uniqueResult(),但它“返回”
org.hibernate.NonUniqueResultException:查询没有返回唯一的结果:3
我也尝试过使用hibernate的
createQuery(select min(pollingTime) from tableName).list()但是结果是相同的(两个空,一个有正确的结果)。
我还尝试添加预定义的ResultTransformer以从列表中删除空值,但失败了。
作为解决办法,我可以使用sql查询获得所需的最小值:
createSQLQuery("SELECT MIN(pool_time) FROM tableName") 这是目前唯一的解决办法。
你知道为什么返回的结果不正确吗?
你好,Niki
发布于 2012-02-29 07:22:43
我找到了归还这条明渠的原因。正如我所描述的,系统中有一些继承。因此,在搜索基类表中的最小值时,hibernate试图为所有子类表找到最小值。在我们的例子中,子类的表是空的,因此没有最小值,因此它创建了正确的值以及子类表中的空值。
为了解决这个问题,我在hibernate映射文件中将多态性设置为显式:
<class name="class" table="TABLE" polymorphism="explicit">在搜索超类表时,上述内容将禁用在指定表中的搜索。
妮基
发布于 2012-02-28 11:11:43
与其专注于从列表中删除null,我认为您应该找出它们的来源。我想知道,该列的值为NULL的表行有哪些?也许你应该尝试这样的方法:
select min(r.pollingTime) from r : tableName where r.pollingTime != NULL发布于 2012-02-28 12:27:22
根据数据类型的不同,整数和字符串的min值可能不同。例如,如果将1、2、11作为整数11,则为max。但如果作为字符串2是最大值。
验证列的数据类型。
https://stackoverflow.com/questions/9480369
复制相似问题