我将 Spring 与 PostgreSQL 结合使用,并尝试使用如下代码执行某种 UPSERT:
jt.update("delete from A where id = 1")
jt.update("insert into A (id, value) values (1, 100)")
包装在交易内(使用@Transactional
).
问题是,当有许多并发请求时,此代码会因“重复键”错误而失败,这意味着事务不是隔离的,或者......
我是否遗漏了有关交易如何运作的信息?我应该在这里使用不同的机制(例如线程同步)吗?
我写了一篇关于它的相当长的博文,所以即使我可能会因为链接而被否决,请阅读this http://www.depesz.com/2012/06/10/why-is-upsert-so-complicated/.
要点是事务在这里没有帮助(至少默认情况下),虽然可以编写正确的更新插入,但实际上非常棘手。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)