Java Hibernate 4.1使用结果转换器计算投影类型不匹配(长/整数)
我有一个实体beanJava Hibernate 4.1使用结果转换器计算投影类型不匹配(长/整数),java,hibernate,criteria,Java,Hibernate,Criteria,我有一个实体beanfootentity和DAO方法来获取按该实体上的属性分组的行计数,封装在视图模型beanfootcount中 public List<FooCount> groupByFoo() { return sessionFactory.getCurrentSession() .createCriteria(FooEntity.class) .setProjection(Projections.projectionList()
footentity
和DAO方法来获取按该实体上的属性分组的行计数,封装在视图模型beanfootcount
中
public List<FooCount> groupByFoo() {
return sessionFactory.getCurrentSession()
.createCriteria(FooEntity.class)
.setProjection(Projections.projectionList()
.add(Projections.groupProperty("foo"), "foo")
.add(Projections.count("foo"), "count")
).setResultTransformer(Transformers.aliasToBean(FooCount.class))
.list();
}
public class FooCount {
private String foo;
private Integer count; // <-- this is the problem
// getters/setters...
}
如果我将count
更改为Long
,它会起作用,但我不希望更改视图模型类,因为它在其他地方使用
我可以以某种方式进行
Projections.count()
返回一个整数
,或者将结果转换器从Long
转换为整数
?您不能自己在属性的setter方法中进行转换吗?您可以使用SQL投影将其转换为整数:
.setProjection( Projections.sqlProjection(
"Cast(Count(foo) as Integer) count",
new String[]{"count"},
new Type[]{StandardBasicTypes.INTEGER}
)
看起来Hibernate中COUNT(*)函数的标准映射是。因此,替换整数有助于:
public class FooCount {
private String foo;
private BigDecimal count; // <--
// getters/setters...
}
公共类FooCount{
私人字符串foo;
private BigDecimal count;//我确实尝试过,但希望找到一种不涉及更改FooCount
beanAh brilliant的方法。这也比我当前的解决方案好得多,因为我的实际代码比我发布的SSCCE更复杂,这让我可以进一步简化。谢谢。
public class FooCount {
private String foo;
private BigDecimal count; // <--
// getters/setters...
}