Java Hibernate 4.1使用结果转换器计算投影类型不匹配(长/整数)

Java 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()

我有一个实体bean
footentity
和DAO方法来获取按该实体上的属性分组的行计数,封装在视图模型bean
footcount

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...
}