Es gibt eine UNIQUE-Datenbankbeschränkung für einen Index, die nicht zulässt, dass mehr als ein Datensatz identische Spalten hat.
Es gibt ein Stück Code, das von Hibernate (v2.1.8) verwaltet wird und das zwei DAO
getHibernateTemplate().save( theObject )
aufruft, woraufhin zwei Datensätze in die oben genannte Tabelle eingetragen werden.
Wenn dieser Code ohne Transaktionen ausgeführt wird, führt er zu INSERT, UPDATE, dann zu einer weiteren INSERT- und einer weiteren UPDATE-SQL-Anweisung und funktioniert einwandfrei. Offenbar besteht die Reihenfolge darin, zuerst den Datensatz mit DB NULL einzufügen und ihn dann mit den richtigen Daten zu aktualisieren.
Wenn dieser Code unter Spring (v2.0.5) in einer einzigen Spring-Transaktion ausgeführt wird, führt dies zu zwei INSERTS, gefolgt von einer sofortigen Ausnahme aufgrund der oben erwähnten UNIQUE-Beschränkung.
Dieses Problem zeigt sich nur bei MS SQL aufgrund seiner Inkompatibilität mit ANSI SQL. Es funktioniert gut mit MySQL und Oracle. Leider ist unsere Lösung plattformübergreifend und muss alle Datenbanken unterstützen.
Was wäre Ihre bevorzugte Lösung für das gegebene Problem, wenn Sie über diesen Stapel von Technologien verfügen?