このブログでも何回か書いてきたJPAですが、新規レコードをインサートさせた際IDを取得し、そのIDをもとに何らかのキーを作る、そういう処理があったので紹介させていただきます。
何回か書いてますが、JPAのpersistはinsertではなく、あくまでそれ以降エラーがなければglassfishがコミットし、最終的にインサートされます。
なのでpersist直後にはIDが取得されません。
そのため冒頭にあげたような処理を行うことはできません。
いろいろ調べましたが、flushというメソッドを使うと、データベースと同期することができ、IDを取得できます。まだコミットはしていないので、エラーが発生したらロールバックします。
下記コードが処理の内容です。
1 2 3 4 5 6 7 |
//ここでJPA管理下に置く this.getEntityManager().persist(entity); //ここでオブジェクトとDBを同期(そうしないとIDが反映されない) this.getEntityManager().flush(); //パスワードのセット System.out.println("id="+entity.getId()); // id=1などが表示される |
リンクは下記を参考にしてます。もっとしっかりと理解しないとまずいなー