1

我正在使用带有spring的hibernate(用于事务管理)并且有一个像这样的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 测试用例中一切正常。

有任何想法吗?

4

0 回答 0