0

私は最近、JPA (EclipseLink が提供) の (私にとって) 予想外の動作に遭遇しました。

次のコードを検討してください。

public int myFunction() {
    entityManager.getTransaction().begin(); // Application-managed EntityManager

    MyEntity entity = new MyEntity();
    entity.setPrimaryKey(1);
    entityManager.persist(entity);

    entity = entityManager.find(MyEntity.class, 1);

    if (entity == null) {
        return 0;
    }

    entityManager.getTransaction().commit();

    return 1;
}

関数は 0 を返します。これは、トランザクションが閉じられる前に永続化されたエンティティが見つからないことを意味します。

質問。 まだコミットされていないが永続化されたエンティティを見つけることができる回避策はありますか? そうでない場合、自分で何らかのキャッシングを行う必要がありますか?

4

1 に答える 1

2

EntityManager.flush() 操作を使用できます。

于 2012-07-04T07:54:11.290 に答える