在hibernate中运行Projection计数查询时的Classcast异常

时间:2016-08-08 13:31:11

标签: java hibernate

我正在使用hibernate 4.3.1 hibernate的最终版本。 在hibernate映射文件中,我已将该属性定义为整数。 例如:<property name= "jobNo" type="integer">

使用的数据库是DB2。 其中jobNo列定义为Integer。 尝试使用Projection API重新计算jobNo时:

criteria.setProjection(Projections.count(jobNo));
criteria.uniqueResult();

它以Long返回。理想情况下,它应该以{{1​​}}返回。

我是新手,有人可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

  

它正在返回Long。理想情况下,它应该作为整数返回。

你没有动手。它由你的JPA实现处理(这里是休眠)。

如果您知道count返回的值不能超过整数最大值(2147483647),那么它应该不是问题。您可以将Long转换为Integer。如果您有疑问,可以检查Long值是否超过 整数最大值。
无论如何,我建议你转换为Number而不是Long,如果你改变JPA实现,你可能会避免意外。

int jobNo = ((Number)criteria.uniqueResult()).intValue();

答案 1 :(得分:0)

org.hibernate.criterion.Projections.count(String propertyName)始终返回Long值,就像HQL返回的值一样。在映射中使用Long类型。如果您不想更改映射类型,则在Hibernate 4.1 Count Projection Type Mismatch (Long/Integer) using Result Transformer给出另一个解决方案。希望这会有所帮助。