私は(トランザクション管理のために)Springで休止状態を使用しており、そのようなDAOを持っています
@Transactional
class Dao{
public save(Entity e){
//stored an entity
Entity saved = entityManager.merge(e);
//flush the dataset to the db
entityManager.flush();
//updates the saved entity with a stored procedure
entityManger.createNameQuery(STORED_PROCEDURE).setParameter(0, saved.getId()).executeUpdate();
}
}
これは、次の環境で実行され、結果が異なります。
- JUnit: ここではすべて正常に動作します。エンティティが保存され、保存されたデータセットがストアド プロシージャによって更新されます。
- Glassfish 上の EJB: ストアド プロシージャが最初に実行され、次に保存操作が実行されます (休止状態からの SQL コマンドをログに記録します)。フラッシュが実行されていないようです。
その結果、ストアド エンティティにはストアド プロシージャの更新が含まれません。Glassfish環境で操作が異なる順序で実行され、Junitテストケースですべてが正常に機能する理由がわかりません。
何か案は?