2016-03-20 8 views
0

Hibernateの結果クエリでエンティティの主キーまたはIDを取得しているときに、ヌルポインタ例外が発生します。主キー値は単なる長い値です。私のエンティティクラス:ハイバーネーション結果のヌルポインタが長い値を取得できない

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

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

2nd varibale and so on 

は私が休止状態のクエリを記述することがNullポインタ例外が発生し取得するために、私の選択クエリは次のとおりです。

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; 

任意の提案プラザ?任意の助けが大いに評価されるでしょう

+0

スタックトレースとは何ですか? –

+1

明らかに、クエリはnullでなければなりません。だからあなたのセッションで何かが間違っているかどうかをチェックしたいかもしれません。または(私は休止状態について知らないので):あなたが最初にあなたの質問を実行しなければならないかもしれませんか?あなたがクエリを作成するのはちょっと疑わしいようです。すぐに結果にアクセスしようとします。それ以外にも、ccyはクラスにとって本当に悪い名前です。大文字で始める必要があります。と:略していない。コードを読み込む必要があります。そのような略語はあまり伝えません。 – GhostCat

+0

セッションと開始トランザクションを作成する場所の完全なコードを共有します。私はあなたにセッションに関する問題があるとは思わない。もう1つのポイントは、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

関連する問題