我已经使用HQL解决了我的问题并且它运行良好。
但我确实喜欢Criteria API。 (我的querybuilder字符串中有一些ifs语句用于HQL,但是) 显然,Projections.sum(属性)返回double。
我的实体类有
@Column(name = "current_volume")
private Integer currentVolume;
我得到的错误是
org.hibernate.PropertyAccessException:调用se.unox.pejl.entity.value.pejl.PejlDataTrendValue.currentVolume的setter时发生IllegalArgumentException。
我的等效工作hql是
select cast(sum(p.currentVolume/1000) as integer) as currentVolume from
se.unox.pejl.entity.value.pejl.PejlDataTrendValue as p
我想我知道问题是什么,但无法弄清楚如何将整数列(在mysql中为INT(11))转换为Integer。显然NHibernate有Projections.Cast
我正在使用Hibernate 3.6
答案 0 :(得分:2)
基于this blog post(除非在3.5和3.6之间更改了某些内容),Projections.sum
的返回类型取决于要求的属性的属性类型:
对于映射为Long,Short,Integer或原始整数类型的属性,返回Long值;
对于映射为Float,Double或原始浮点类型的属性,将返回Double值。
如果要覆盖原生功能,follow the answer in this post。