vul*_*ul6 9 java spring hibernate java-ee
我正在使用Spring和Hibernate.我正在运行jUnit测试,如下所示:
String number = invoiceNumberService.nextInvoiceNumber();
Run Code Online (Sandbox Code Playgroud)
和invoiceNumberService方法是:
InvoiceNumber invoiceNumber = invoiceNumberRepository.findOne(1L);
Run Code Online (Sandbox Code Playgroud)
它使用简单的spring数据存储库方法,并且运行良好.但是当我重写此方法以使用锁定时:
@Lock(LockModeType.PESSIMISTIC_READ)
@Override
InvoiceNumber findOne(Long id);
Run Code Online (Sandbox Code Playgroud)
我收到"javax.persistence.OptimisticLockException:Row被另一个事务更新或删除"
我无法理解为什么它的乐观锁定异常,而我使用的是悲观锁定?当另一个交易正在改变这个实体时,这个部分在哪里?我已经挖了很多类似的问题,我非常绝望.感谢您的帮助
解决方案:
问题出在我的测试类的init函数中:
@Before
public void init() {
InvoiceNumber invoiceNumber = new InvoiceNumber(1);
em.persist(invoiceNumber);
em.flush();
}
Run Code Online (Sandbox Code Playgroud)
缺乏
em.flush();
Run Code Online (Sandbox Code Playgroud)
这将数据保存到数据库中,因此findOne()现在可以对其进行检索
问:dao或者service层有没有给@transcational注解?发生这种情况的原因是两个事务同时尝试更改同一个表的数据。因此,如果您从 dao 层中删除所有注释并放入服务层,它应该可以解决我的问题...因为我面临类似的问题。希望能帮助到你。
归档时间: |
|
查看次数: |
983 次 |
最近记录: |