JPAを使って開発しています。
対象DBは、SQL Server、Oracle、PostgreSQLのいずれでも動作可能な設計です。
(JPAを使っているので、実装上は特に区別しません)

あるマスタを保存するテーブルXに、ORDERという列があります。
テーブルXのマスタを全て表示するときの並び順が入っています。
ただ、ORDERの数値は重複させたくないので、ユニーク制約を設けています。

この並び順は、画面上でドラッグ&ドロップで入れ替えることができるのですが、登録するときには複数のレコードに対してORDER列の数値を更新します。
この時、ユニーク制約の違反が発生してしまい、困っています。

例えば、

ID     ORDER
A      1
B      2
C      3

これに対して、BとCを入れ替えるとします。
その場合のクエリは、何も考えずに作ると次のようになると思います。
※実際にはJPQLを使って実装しています。

(1) UPDATE X SET ORDER = 3 WHERE ID = 'B'
(2) UPDATE X SET ORDER = 2 WHERE ID = 'C'

しかしこれでは、(1)を実行すると、BもCもORDERが3になってしまうので、ユニーク制約違反のエラーが発生します。

こういった要求は割とよくあると思うのですが、どのように解決するものなのでしょうか?