Ich schreibe eine Anwendung, die Entitäten von einer Drittanbieter-Datenquelle in unser eigenes Schema synchronisiert, mit einem Transformations-/Mapping-Schritt dazwischen. Ich verwende Hibernate, um die Entitäten in unserem eigenen Schema darzustellen und zu persistieren. Ein Problem, auf das ich stoße, ist, dass ich einen eindeutigen mehrspaltigen Schlüssel an einem meiner Tische habe. Das Verhalten, das ich gerne sehen möchte, ist analog zu einem Upsert: Wenn Hibernate eine Entität persistiert und eine eindeutige Constraint-Verletzung erkennt, führt sie stattdessen eine Aktualisierung durch. Wir verwenden MySQL, das eine INSERT ... ON DUPLICATE KEY UPDATE-Syntax bietet, aber ich bin mir nicht sicher, wie oder ob Hibernate davon Gebrauch machen kann?Wie kann das Verhalten bei der Verwendung von Hibernate nachgeahmt werden?
Ich denke, ich könnte immer versuchen, die Einfügung, und wenn ich eine Ausnahme abfangen, ein Update, aber das scheint hacky und suboptimal. Irgendwelche Tipps auf eine saubere Art und Weise dies zu tun?
Wenn die Auswahl Matches keine Zeilen zu vermeiden, werden keine Zeilen von „for update“ gesperrt werden. Die Wettlaufbedingung wird nicht vermieden. –