我正在使用带有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 测试用例中一切正常。
有任何想法吗?