2010-12-11 72 views
2

我对hibernate标准有疑问。标准在没有记录时显示列表大小1

当列表中没有记录时,我将列表大小设为1。当我打印列表时显示为列表[null]。

我的代码:

final Double depositAmount = (Double)session.createCriteria(vardhanDep.class) 
     .add(Restrictions.eq("userDetByCrtbyUserid", userid)) 
     .add(Restrictions.eq("delflag","0")) 
     .setProjection(Projections.sum("amount")) 
     .list().get(0); 

帮助我解决这个问题

+0

这似乎正是它应该做的。什么是问题?你想要它做什么?另外,看到用于存储某种东西的IEEE浮点表示有些令人担忧:) – Affe 2010-12-11 09:08:42

+0

我同意Affe对使用浮点类型(在您的情况下为Double)中与金钱有关的事情感到非常惊讶。我感兴趣的是浮点并不总是表示您认为它的确切数字,并且它有时表示最接近可能的浮点数,而不是您认为它的数字。例如,如果将双精度定义为0.9,那么它实际上将是最接近的双精度值,即0.8999999999999999。说到钱,这当然可以是可怕的。改用Bigdecimal。 – Tim 2010-12-11 10:55:50

+0

顺便说一句,如果你使用BigDecimal,使用* String *构造函数而不是* double *构造函数,否则你会遇到同样的问题。 – Tim 2010-12-11 11:01:38

回答

2

由于是Affe已经提到,这是完全一样的预期。 Projections.sum实际上是一个所谓的聚合投影,这意味着它将在所有返回的记录上进行聚合(如在SQL中由组成的组)。因此,在您的示例中,Projections.sum因此会计算所有返回的记录(意味着符合您的条件的所有记录)中的金额字段的总和。即使没有记录符合您的标准,汇总也会计算总和,当然这个总和是'0',因为没有什么可以总结。因此,尽管符合条件的记录数量很大,投影总是会返回记录,并且始终只有一条记录。

+0

ThanQ你的reply.And我解决了我的问题 – jayavardhan 2010-12-15 10:47:22

+0

我不是我检查list.get(0)!= null然后我访问该元素 – jayavardhan 2010-12-16 07:08:41

相关问题