У меня есть таблица с уникальным столбцом, «токеном», навязанным уникальным ограничением в базе данных.В определенном случае мне нужно изменить существующую строку так, чтобы она имела тот же токен, что и другая существующая строка, изменив 2-ую строку на новое значение.
Итак, скажем, у меня есть:
id; токен 0; 'aaa' 1; 'bbb'
Я хочу, чтобы id 0 ('aaa') вместо этого имел токен 'bbb'.Поэтому мне нужно изменить «bbb» на «jfeisefjse», а затем я могу изменить «aaa» на «bbb».Это можно сделать в postgres за один раз.
Я пытался сделать то же самое в коде: в одной транзакции я получаю токен из существующей строки (строка 1), я устанавливаю его равнымслучайное значение, я обновляю другую строку (строка 0), чтобы получить токен строки 1, а затем фиксирую.Однако hibernate не соблюдает порядок, в котором я делал коммиты. Кажется, сначала всегда запускается оператор update для строки 0, и postgres жалуется, что он нарушает ограничение внешнего ключа.
Как я могу сделатьСпящий режим сделать это?Принудительно ли выполнять определенный порядок операторов обновления, или каким-либо другим способом сделать это?
Примечание. Делать это в двух транзакциях (одна для скремблирования строки 1, затем другая транзакция для обновления строки 0) не вариант.