2012-03-08 22 views
1

私のhibernateクエリはnullを返します。私はインターネットで検索しましたが、この特定の質問に対する回答は見つかりませんでした。hibernate session get returns null

public T findById(Long id){ 
    return (T) sessionFactory.getCurrentSession().get(getPersistentClass(), id); 
} 

このIDを持つエンティティはデータベースに存在しますが、このクエリは常にnullを返し、理由はわかりません。生成されたクエリは次のとおりです。

Hibernate: select quiz0_.QUIZ_ID as QUIZ1_3_0_, quiz0_.CATEGORY as CATEGORY3_0_, quiz0_.CREATED_DATE as CREATED3_3_0_, quiz0_.CREATOR_ID as CREATOR4_3_0_, quiz0_.DESCRIPTION as DESCRIPT5_3_0_, quiz0_.IS_IMMEDIATE_CORRECTION as IS6_3_0_, quiz0_.IS_MULTIPAGE as IS7_3_0_, quiz0_.NUM_OF_QUESTIONS as NUM8_3_0_, quiz0_.IS_PRACTICE_MODE as IS9_3_0_, quiz0_.TITLE as TITLE3_0_, quiz0_.IS_RANDOM as IS11_3_0_, quiz0_.RATING as RATING3_0_ from QUIZ quiz0_ where quiz0_.QUIZ_ID=? 

ありがとうございます。

+0

「id」が有効であることをデバッグによって確認しましたか? – bvulaj

+0

問題は実際にnullを返す呼び出しメソッドにありました。いずれかの方法。すべてのあなたの応答をありがとう。 –

答えて

0

データベーステーブルQUIZは確かにクラスを作るために、次の

ではなくgetPersistentClass()

T.classを試すか、あなたは

+0

T.classは動作しません。Tは実行時に使用できないため、私は思っています。 getPersistentClass()は問合せに示されているように問題ではないようです。正しいタイプを識別します。 –

+0

T.classが無効です。 – bvulaj

1

は、私がやった自分のエンティティ名とT.classを変更することができますTクラスにマッピングされている場合このdao実装を拡張して使用すると設定されます(完全なdao実装ではありません)

public abstract class GenericDaoImpl<T, I extends Serializable> implements GenericDao<T, I>{ 
     private Class<T> type; 
     public GenericDaoImpl() { 
      this.type = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; 
     } 
     public T find(I id) { 
      Assert.notNull(id); 
      return (T) getSessionFactory().getCurrentSession().get(getType(), id); 
     } 
} 
+0

私は同じパターンをしました。ただし、は、Tの代わりにのようにしました。正しいIDがsessionFactory.getCurrentSession()。get(getPersistentClass()、id)に渡されている限り、それが前述の問合せの行にどのように影響するかはわかりませんが、 。 –

+0

これは奇妙です。クイズクラスは正しくマップされていますか?正しいデータが渡されていることを確認するために少しずつデバッグコメントを追加しようとしましたか? – Sebastien