如何在同一个交易中保持和刷新

时间:2012-01-16 13:25:29

标签: hibernate transactions ejb-3.0 persistence-manager

我有多个用户。为了防止并发,我写了类似的东西:

@EJB
PersistenceManagerRemote persistenceManager;

persistenceManager.lock(decidableEntity, LockModeType.READ);
persistenceManager.refresh(decidableEntity);
这对我有用。但是,如果我坚持一些东西,然后我在同一个事务中调用此代码,那么我得到了错误。

 javax.persistence.PersistenceException: org.hibernate.HibernateException: this instance does not yet exist as a row in the database

当我持久化实体时,在事务结束之前不会影响数据库上下文。因此,当我刷新时,它会尝试在数据库中查找实体,因此会出现错误。你有解决方案吗?我不能分成两个交易。我还应该考虑并发性。我能做什么?

1 个答案:

答案 0 :(得分:4)

您需要调用em.flush()将所有挂起的更改写入数据库。 persist()仅将一个临时实体附加到持久化上下文。 Hibernate只在必要时刷新,以便在它们不存在时避免它们,并且能够将它们发送到批处理中。