2010-12-11 47 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

相關問題