我正在将 Spring 与 PostgreSQL 一起使用,并尝试通过使用如下代码来执行一种 UPSERT:
jt.update("delete from A where id = 1")
jt.update("insert into A (id, value) values (1, 100)")
包裹在事务中(使用@Transactional
)。
问题是,当有许多并发请求时,此代码会因“重复键”错误而失败,这意味着事务不是孤立的,或者......
我是否错过了有关交易如何运作的一些信息?我应该在这里使用不同的机制(例如线程同步)吗?