persist()
の後にデータベースが生成するIDを取得する必要があります。コードの次の部分を実行する際にHibernateでpersistの後にデータベース生成IDを取得する
@Entity
@Table(name = "TableName")
public class TableNameClass {
@Id
@Generated(GenerationTime.INSERT)
@Column(name = "ID", insertable = false, nullable = false, unique = true, updatable = false)
private int ID;
...
}
しかし、実体はDBに保存されているが、System.out.println
の結果は0である:
Session s = HibernateUtil.getSessionFactory().openSession();
TableNameClass tnc = new TableNameClass();
tnc.setName("SessionTest4");
Transaction t = s.beginTransaction();
s.save(tnc);
t.commit();
System.out.println(tnc.getID());
s.close();
誰も私を助けてもらえ私のエンティティは、このようになります、 お願いします?
PD:セッションやEntityManagerを使用しても構わないので、いずれかのソリューションが問題ありません。
編集:私はflush()
save()
後にメソッドを追加しようとしたが、き
まだ動作しません:
Session s = HibernateUtil.getSessionFactory().openSession();
AlertType at = new AlertType();
at.setName("SessionTest4");
Transaction t = s.beginTransaction();
s.save(at);
s.flush();
t.commit();
System.out.println(at.getID());
s.close();
私もcommit()
後flush()
機能を追加しようとしました、しかし、トランザクションがアクティブではないという例外がスローされます。
まだ動作しません。私が行った変更で質問を更新しました。何か案が?私はHibernate 5.2.4を使用しています。最終 –
コミットはトランザクションを終了し、CMPを使用している場合は必要ありません。それを取り出し、それが動作するかどうかを確認します。 – WPrecht
まだ動作しません。私はpersist()を削除しましたが、依然として0を返します。このチュートリアル[link](http://www.journaldev.com/3481/hibernate-session-merge)に従って、トランザクションなしでエンティティを保存してみました。 -vs-update-save-saveorupdate-persist-example)と自動コミットプロパティを有効にしていますが、これはHibernateの最新バージョンではこれ以上動作していないと思います。 –