如何处理并发用户的乐观锁定项目数量更新



我有更新到项目数量的方法。

只要MyEntity具有@Version注释版本属性。

有一个项目列表终结点/items还有一个项目更新端点/item/update(考虑作为产品库存,购买项目(

因此,N 个并发用户希望更新相同的项目。

org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1这个例外。更新时。

而且此时,/items终结点无法返回数据。或者等待用户返回时延迟过长。(如果此时更新用户计数过多,它也会出现exception timeout(。

那么我怎样才能处理这种情况而不会遗漏呢?(可以很好的实现(

不幸的是,当存在争用时,JPA/Hibernate不能很好地处理批处理插入:每当在休眠会话的上下文中抛出任何异常时,你就不走运了。

请参阅 13.2.3.异常处理:https://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/ch13.html#transactions-optimistic

具体说来:

Hibernate引发的任何异常都不能被视为可恢复。确保 会话将通过在 finally 块中调用 close(( 来关闭。

过去,我不得不将JPA代码迁移到QueryDSL或回退到原始SQL和JdbcTemplate(类似于如何使用Spring JDBC模板批处理在数据库中进行多次插入?(。

最新更新