我创建了一个简单的@NamedQuery:
@NamedQuery(name = "Etap.findSum", query = "SELECT e.czas FROM Etap e WHERE e.stan=1")
工作正常。字段e.czas
已映射为Integer
,并且在DB2数据库中的类型为INTEGER
。现在,当我试图以这种方式改变它时:
@NamedQuery(name = "Etap.findSum", query = "SELECT SUM(e.czas) FROM Etap e WHERE e.stan=1")
它失败了,而且编辑器没有提示选择归档的e.czas
作为查询的参数。
当我将字段czas
的类型更改为int
时,会给出提示,但查询仍然不起作用(从IBM Data Studio控制台调用时它可以正常工作)。
下面列出了我调用查询的方法(结果总是得到-1):
public Integer suma(){
try{
Query q = em.createNamedQuery("Etap.findSum");
Integer suma = (Integer)q.getSingleResult();
return suma;
}
catch(Exception e)
{
return -1;
}
在这种情况下,我做错了什么?
答案 0 :(得分:0)
这可能是因为ORM会自动扩展结果,预期结果变成Long
,而不是Integer
。
请注意,如果源列是Short
(等效),那么SUM(...)
widens the result to an Integer
in all cases。文档没有明确提到Integer
源列的情况,但我想象数据库在结果足够大的情况下自动加宽它。
ORM然后必须通过确保它可以处理一个长的来解释这个潜在的行为 - 所以它将它转换为该类型,除非结果被明确声明是安全的(通过将其转换为db上的Integer
)