索引上有一个 UNIQUE 数据库约束,它不允许多个记录具有相同的列。
有一段代码,由 Hibernate (v2.1.8) 管理,执行两次 DAO
getHibernateTemplate().save( theObject )
调用,结果将两条记录输入到上面提到的表中。
如果此代码在没有事务的情况下执行,则会产生 INSERT、UPDATE,然后是另一个 INSERT 和另一个 UPDATE SQL 语句,并且工作正常。显然,顺序是先插入包含 DB NULL 的记录,然后用适当的数据更新它。
如果此代码在包装在单个 Spring 事务中的 Spring (v2.0.5) 下执行,则会导致两个 INSERTS,然后由于上述 UNIQUE 约束而立即出现异常。
由于与 ANSI SQL 不兼容,此问题仅在MS SQL上表现出来。它在 MySQL 和 Oracle 上运行良好。不幸的是,我们的解决方案是跨平台的,必须支持所有数据库。
拥有这些技术堆栈,对于给定问题,您首选的解决方法是什么?