1

こんにちは、JPA でエンティティの自動生成された主キーに問題があります。エンティティを永続化し、そこから id 値を取得しようとしていますが、フラッシュを実行しているにもかかわらず、null が返されます。最新のグラスフィッシュ、JPA、ネットビーンズ、EJB 3 を使用しています

public class CatchesEntity implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    (...)




    @PersistenceContext(unitName = "DBF")
    private EntityManager em;

    (...)
    public void randomMethod()
    {
         CatchesEntity catchEntity = new CatchesEntity();
         em.persist(catchEntity);
         em.flush();
         System.out.println("CATCH ID: "+catchEntity.getId());

私はNULLを取得します

4

1 に答える 1

2

を呼び出すflush()と、ほとんどの命令が DB に送信INSERTされますが、 で生成されたコマンドは送信されませんcommit()。詳細については、この質問を参照してください。

コンテナ管理のトランザクションを扱っているようですので、通常はメソッドが戻ったときにコミットが実行されます。

メソッド内で強制的にコミットしたい場合は、Bean または 1 つのメソッドで CMT を無効にして、次を使用できますUserTransaction

tx.begin();
...
em.persist();
tx.commit();
于 2013-03-12T12:03:02.623 に答える