0

すべての CRUD メソッドが正しく機能していることを確認するために、いくつかのテストを書いています。それらはすべて正常に機能していますが、remove メソッドをテストするのは少し難しいようです。

私のテストでは、私はこれをやっています:

// remove
a = dao.select(1); // previously inserted in the DB
dao.remove(a);
assertNull(dao.select(a.getId()));

そしてDAOクラス(選択と削除のみ):

@Override
 public AtividadeComercial select(int id) {
      return em.getReference(AtividadeComercial.class, id);
}

@Override
public void remove(AtividadeComercial e) {
    EntityTransaction t = em.getTransaction();
    boolean active = t.isActive();
    if(!active)
        t.begin();
    em.remove(em.getReference(e.getClass(), e.getId()));
    if(!active)
        t.commit();
}

しかし、テストは常にjavax.persistence.EntityNotFoundExceptionの後にを投げていremoveます。これは正常な動作ですか、それとも何か本当に問題がありますか? これが明らかなように思われる場合は申し訳ありませんが、それに対する答えが見つかりませんでした。

4

1 に答える 1

0

getReference()null を返すことはありません。そのドキュメントを読んでください:

状態を遅延フェッチできるインスタンスを取得します。要求されたインスタンスがデータベースに存在しない場合、インスタンスの状態に最初にアクセスしたときに EntityNotFoundException がスローされます。

このメソッドは、存在するはずのエンティティのプロキシを返します。エンティティが存在するかどうかを確認するためのデータベース クエリも作成しません。エンティティが存在すると想定します。後でプロキシが初期化され、エンティティが存在しない場合は、EntityNotFoundException が発生します。

于 2013-09-30T14:53:15.050 に答える