Существует ограничение базы данных UNIQUE для индекса, которое не допускает более одной записи с одинаковыми столбцами.
Существует фрагмент кода, управляемый Hibernate (v2.1.8), выполняющий два DAO
getHibernateTemplate().save( theObject )
вызовы, в результате которых две таблицы заносятся в таблицу, указанную выше.
Если этот код выполняется без транзакций, он вызывает INSERT, UPDATE, затем другой INSERT и другие операторы SQL UPDATE и работает нормально. Очевидно, последовательность состоит в том, чтобы сначала вставить запись, содержащую БД NULL, а затем обновить ее соответствующими данными.
Если этот код выполняется в Spring (v2.0.5), заключенном в одну транзакцию Spring, он приводит к двум INSERTS, за которыми следует немедленное исключение из-за ограничения UNIQUE, упомянутого выше.
Эта проблема проявляется только на MS SQL из-за ее несовместимости с ANSI SQL. Отлично работает на MySQL и Oracle. К сожалению, наше решение является кроссплатформенным и должно поддерживать все базы данных.
Имея этот стек технологий, какой бы вы предпочли обходной путь для данной проблемы?