2

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

@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

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

4

1 回答 1

4

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

于 2012-01-16T13:31:02.607 回答