0
我在我的java多线程项目中得到了org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect):
。Hibernate Row被另一个事务更新或删除
我正试图在两个不同的线程内访问相同的数据库记录。我该如何解决这个问题。这是我有错误的方法,
@Override
@Transactional
public Gamedetail getByExternalGameIdAndSource(String id, String dataSource) {
return (Gamedetail) sessionFactory.getCurrentSession().createCriteria(Gamedetail.class).add(Restrictions.eq("externalgameid", id))
.add(Restrictions.eq("datasource", dataSource)).uniqueResult();
}
我知道hibernate会话不支持多线程。我使用本机SQL查询,但它给了我类抛出异常。提前感谢。
是一些还是一个线程更新相同的记录?因为在读取记录时不应该得到'org.hibernate.StaleObjectStateException'。 – Bunti
即使你可以修复它,但数据库不会允许你同时修改相同的记录/行 – AntJavaDev
@Bunti两个线程同时运行,这两个线程有无限循环。所以一个循环正在创建gameDetail对象。如果您没有找到特定的gameDetail,则此方法将返回null,然后创建一个新的gameDetail记录并保存它,否则会更新它。其他线程试图访问gameDetail并尝试更新一些字段。 – Neero