2016-04-20 16 views
1

私は、MySQL DBからいくつかのレコードをリストしようとしている私のJSF2コード内に休止状態の実装を持っています。次のコードスニペットがあります。Search.java - クエリロジックの実装。 Student.java - レコード保存ロジックを実装しています。Hibernate retrieve query not working

私が直面している問題は、Search.javaを実行するたびに返される結果が「null」です。

ご注意ください - 私のDBには既に多くのエントリがあります。私がStudent myStudent = session.get(Student.class, 23);をクエリしようとしたときにも、それは私に 'null'を返しました。
23はSQLテーブルのidフィールドです。また、このテーブルにはIDとしてのPKが自動生成されています。私は完全に正常に動作するレコードを挿入するための別のクラスを持っています。

Search.java

public class Search { 

    public static void main(String[] args) { 

     // create session factory 
     SessionFactory factory = new Configuration().configure("hibernate.cfg.xml") 
      .addAnnotatedClass(Student.class).buildSessionFactory(); 

     // create session 
     Session session = factory.getCurrentSession(); 

     try { 

      // start a transaction 
      Student tempStudent = new Student("bob", "thebuilder", "good", "[email protected]", "(456)-456 5897"); 
      session.beginTransaction(); 

      session.save(tempStudent); 

      // commit transaction 
      session.getTransaction().commit(); 
      System.out.println("id of the student is " + tempStudent.getId()); 

      session = factory.getCurrentSession(); 
      session.beginTransaction(); 

      System.out.println("student with id " + tempStudent.getId()); 
      Student myStudent = session.get(Student.class, tempStudent.getId()); 

      session.getTransaction().commit(); 

      System.out.println("Done!"); 
     } finally { 
      factory.close(); 
     } 
    } 
} 

私がここで行われているかもしれないものを誤って教えてください。私はグーグルで何時間も過ごした。また、私の(おそらく)ルーキーミスのために私を許してください、私はハイバーネイトとこのウェブサイトに新しいです。

私はエラースタックまたは私のcfg.xmlも投稿する必要があるかどうか教えてください。

+0

まだ問題が解決しているか、既に解決済みですか? – ujulu

+0

@ujulu - 私はまだ問題に直面しています – NJWeb

+0

設定ファイルを投稿できますか? 'Student'エンティティは' Survey'という名前のテーブルにマップされていますか? – ujulu

答えて

0

あなたのケースでは、tempStudentのIDは0です。あなたは保存された生徒のIDでセッションから取得する必要があります。 これを試してみてください:

Serializable id= session.save(tempStudent); 
... 
Student myStudent = session.get(Student.class, id); 

また、あなたはあなたのhibernate.cfgファイルにshow_sqlプロパティを有効にすることができます。生成されたすべてのsqlがログに記録されるので、okであればチェクすることができます。

+0

返信いただきありがとうございます。一時生徒のIDが保存されています。これは、System.out.println( "学生のIDが" + tempStudent.getId())の場合に反映されます。 "Bob thebuilder"の自動生成IDを返します。 私もあなたの実装を試みました、それはうまくいきませんでした。 – NJWeb

+0

show_sqlを有効にしようとしましたか?生成されるSQLクエリはどのようになっているのかを確認できます。 –

+0

はい、これが出力される。 2016年4月20日午前7時19分46秒PMのorg.hibernate.engine.jdbc.connections.internal.PooledConnections INFO:HHH000115:1(MIN = 1:接続プールのサイズを休止) 2016年4月20日7:19:46 PM org.hibernate.dialect.Dialect 情報:HHH000400:ダイアレクトの使用:org.hibernate.dialect.MySQLDialect Apr 20、2016 7:19:46 PM org.hibernate。 envers.boot.internal.EnversServiceImpl configure INFO:統合を有効にしますか? :真 kjjnull 休止状態: 調査に を挿入 (電子メール、FIRST_NAME、フード、LAST_NAME、TEL) 値 – NJWeb