JPA
を使用して永続化されたエンティティのIDを取得する、スマートで読みやすい方法を探しています。 idはInteger
です。
次の解決策が考えられます。
GeneratedValue
戦略を使用しません。これには、永続化する前にフリーIDを探し、それを永続化するエンティティに配置する必要があります:面倒ですが動作します。GeneratedValue
戦略を使用します。永続化プロバイダーがID生成を処理します。これはよりスマートに見えますが、IDを取得する方法は?ソリューション2については以下を参照してください
MyEntity en = new MyEntity();
en.setName("My name");
em.persist(en);
System.out.println(en.getId());
これはnull IDを出力します!
助言がありますか? MyLink、EclipseLinkを使用していますが、ポータブルソリューションが必要です。
persistはIDの生成を保証しません。 IDは、フラッシュ時にのみ生成されることが保証されています。したがって、トランザクションが終了する前にIDが本当に必要な場合(そしてエンティティマネージャーがフラッシュされる場合)、明示的にflush()を呼び出してIDを取得します。
MyEntity en = new MyEntity();
en.setName("My name");
em.persist(en);
em.flush();
System.out.println(en.getId());