Upsert в весенних данных - PullRequest
       39

Upsert в весенних данных

0 голосов
/ 27 сентября 2019

Есть таблица

columns: id(pk), name, attribute 
unique constraint on (name, attribute).

Есть несколько потоков, которые вставляются в таблицу, если записи там нет.Для этого используется Spring Data, и это сделало транзакцию, которая может занять некоторое время.Записи могут быть одинаковыми, то есть одинаковыми (имя, атрибут), одновременно в нескольких потоках.Время от времени возникает состояние состязания, поток A пытается зафиксировать новую запись, тогда как поток b зафиксировал то же самое, прежде чем поток A прочитал ее.

Есть ли какие-либо подходы к тому, как поступить в таких ситуациях?

Возможно, есть другие предложения по решению этой проблемы, будем рады их услышать.

1 Ответ

0 голосов
/ 27 сентября 2019

Либо сделайте это способом JPA:

Попробуйте найти объект, если его там нет, сохраните его.Если он там, ничего не нужно делать, но, конечно, вы можете обновить его, манипулируя найденной сущностью.

В качестве альтернативы перейдите на SQL и напишите реальный оператор upsert / merge, который поддерживают многие диалекты базы данных.

...