Spring 休眠悲观写入不锁定数据库并返回oldValue

Spring 休眠悲观写入不锁定数据库并返回oldValue,spring,postgresql,hibernate,persistence,pessimistic-locking,Spring,Postgresql,Hibernate,Persistence,Pessimistic Locking,我使用“Postgres”数据库和悲观锁定来锁定数据库行 我有以下代码 @Transactional doProcess(int id, int quantity){ Article article = lockArticle(id); modifyArticle(article, quantity); } 这是lockArticle()函数,用于从DB(Postgres)锁定和获取文章 下面是modifyArticle(),它基本上删除/更新数据库中的文章条目 modifyArt

我使用“Postgres”数据库和悲观锁定来锁定数据库行

我有以下代码

@Transactional
doProcess(int id, int quantity){
   Article article = lockArticle(id);
   modifyArticle(article, quantity);
}
这是lockArticle()函数,用于从DB(Postgres)锁定和获取文章

下面是modifyArticle(),它基本上删除/更新数据库中的文章条目

modifyArticle(Article article, int quantity){

 if(article.getQuantity()<quantity){
     dao.delete(article);
 }

 else{
   article.setQuantity(article.getQuantity()-quantity)
   dao.updateArticle(article);
  }
}
让我们先假设在db中,文章的数量为10

我已经生成了2个线程来更新文章数量,第一个线程生成数量=2,第二个线程生成数量为3。因此,理想情况下,两次完成处理后的DB应为5(10-2-3)

但数据库的净数量(以db为单位)为8(10-2)/7(10-3)


有人能帮我理解为什么悲观锁定不起作用,以及解决这个问题的方法是什么吗?

在获得锁后,如果我执行了session.refresh(entity),我会得到更新的值

modifyArticle(Article article, int quantity){

 if(article.getQuantity()<quantity){
     dao.delete(article);
 }

 else{
   article.setQuantity(article.getQuantity()-quantity)
   dao.updateArticle(article);
  }
}
@Transactional
updateArticle(Article article){
   sessionFactory.getCurrentSession().saveOrUpdate(article);
}