2016-03-20 32 views
0

我在獲取Hibernate結果查詢中的實體的主鍵或Id時出現空指針異常。主鍵值只是一個很長的值。我的實體類:休眠結果中的空指針無法獲取long值

@Entity 
@Table(name="sample") 
public class ccy{ 

@Id 
@column(name = "S_ID") 
private long id; 

2nd varibale and so on 

當我寫Hibernate查詢檢索它會導致空指針異常,我選擇的查詢是:

long ID = 0; 
String HQL = "select c.id from ccy c where c.name='sowndhar' "; 
Query query = session.createQuery(HQL); 
ID = (Long)query.uniqueResult(); //getting NullPointerException in this line 
return ID; 

任何建議PLZ?任何幫助將不勝感激

+0

什麼是堆棧跟蹤? –

+1

顯然,查詢必須爲空。所以你可能想檢查你的會話是否有錯誤。或者(因爲我不知道休眠):它可能是你首先必須執行您的查詢?你創建一個查詢似乎有點可疑;然後立即嘗試訪問其結果。此外:ccy對於一個班級來說是一個非常糟糕的名字。應該從大寫開始;和:不要縮寫。代碼存在需要閱讀;而這種縮寫不會說太多。 – GhostCat

+0

在創建會話和開始交易的地方分享您的完整代碼。我懷疑你在會話中遇到了一些問題。另外一點我注意到,你期望得到一個沒有where子句的查詢的唯一結果。如果你的代碼工作並有多個記錄,那麼它會給你org.hibernate.NonUniqueResultException錯誤。同樣如前所述,您的命名慣例非常混亂。 – sAm

回答

1

在您的代碼中有幾個不良的Java實踐。按照慣例,班級名稱以大寫字母開頭。變量名稱以小寫字母開頭。常量使用全部大寫。 Follow the naming conventions.

在下面的代碼中,我更改變量的類型,以便它允許null作爲值。我還添加了一些錯誤處理,您在請求唯一結果時一定會想要。

順便問一下,你確定你的session變量不爲null嗎?你最近怎麼樣?

Long id = null; // use the nullable Java type, not the primitive 

    String HQL = "select c.id from Ccy c where c.name=:name"; 

    try { 
     // always use parameter tokens in your query ... for security 
     Query query = session.createQuery(HQL) 
      .setParameter("name", name); 

     id = (Long)query.uniqueResult(); 
    } catch (NonUniqueResultException e) { 
     // what to do if there are multiple matches 
    } catch (NoResultException e) { 
     // what if there is no match 
    } 

    return id; 
+0

謝謝..這一定是有幫助的.. – Sowndhar

+0

會議我從sessionFactory得到它 – Sowndhar

+0

你確定它不是null嗎? – carbontax