gpt4 book ai didi

java - 悲观锁中的 OptimisticLockException

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:26:10 27 4
gpt4 key购买 nike

我正在使用 Spring 和 Hibernate。我正在像这样运行 jUnit 测试:

String number = invoiceNumberService.nextInvoiceNumber();

invoiceNumberService 方法是:

InvoiceNumber invoiceNumber = invoiceNumberRepository.findOne(1L);

它使用简单的 spring 数据存储库方法,并且运行良好。但是当我覆盖此方法以使用锁定时:

@Lock(LockModeType.PESSIMISTIC_READ)
@Override
InvoiceNumber findOne(Long id);

我收到“javax.persistence.OptimisticLockException:行已被另一个事务更新或删除”

我不明白为什么它是乐观锁异常,而我正在使用悲观锁?当另一笔交易正在更改此实体时,这部分在哪里?我已经挖掘了很多类似的问题,对此我感到非常绝望。谢谢你的帮助

解决方案:
问题出在我在测试类中的初始化函数中:

@Before
public void init() {
InvoiceNumber invoiceNumber = new InvoiceNumber(1);
em.persist(invoiceNumber);
em.flush();
}

缺少

em.flush();

将数据保存到数据库中,因此 findOne() 现在可以检索它

最佳答案

问题:你在dao或者service层给了@transcational注解了吗?它发生的原因是两个事务同时尝试更改同一个表的数据..所以如果你从 dao 层删除所有注释并放入服务层它应该解决我这个问题..因为我面临类似的问题。希望能帮助到你。

关于java - 悲观锁中的 OptimisticLockException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27356794/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com