Мы пытаемся увеличить объем совместимости базы данных для нашего веб-приложения.Наше приложение - это Java EE с JSP, сервлетами и EJB.База данных, с которой мы пытаемся сделать наше приложение совместимым, - это SQL Server 2008.
Проблема, с которой мы сталкиваемся, возникает в нашем приложении, когда пользователь пытается прикрепить более одного файла на определенном экране с интерфейсом длянесколько загрузок.Пользователь может успешно прикрепить первый файл и база данных обновится правильно.Когда пользователь пытается обновить после добавления второго вложения, выдается ошибка ограничения уникального ключа [Невозможно вставить повторяющееся значение].Далее выводится ошибка:
Violation of UNIQUE KEY constraint 'UQ__Key__8861A9F23EDC53F0'. Cannot insert duplicate key in object 'dbo.Entity'.
org.hibernate.exception.ConstraintViolationException: could not insert: [foo.beans.eproc.entity.Entity]
До сих пор мы пытались решить эту проблему следующим образом:
- Добавление конструкторов к объектамкоторые поддерживают ограничение UQ Key, чтобы инициализировать записи как уникальные и ненулевые.Это решило предыдущие проблемы с другими основными нарушениями ограничений.
- Мы читали о проблеме с Hibernate, выполняющей INSERTS перед DELETES.Ранее мы думали, что это может быть причиной проблемы.В настоящее время в рамках процесса обновления все сохраненные вложения удаляются, а все текущие вложения в сеансе добавляются в базу данных.Мы думали, что если он действительно попытается выполнить INSERTS перед DELETES, то это вызовет нарушение ключа UQ с вложениями.
- Если мы просто удалим ключи UQ в SQL Server и добавим второе вложение,Обновление базы данных происходит без проблем, и в записях, по-видимому, отсутствуют неуникальные данные.
К сожалению, приведенный выше [1] не решил проблему, поскольку нарушение ключа UQ все еще продолжается.выброшены.Для [2] выше, мы не смогли проверить, что Hiberante выполняет INSERTS перед удалением.
Ответы на следующие вопросы помогут нам добиться некоторого прогресса:
- Можетудаление уникальных ключей в SQL-сервере может стать потенциальным решением этой проблемы?
- Есть ли способ убедиться, что Hibernate выполняет или не выполняет INSERTS перед удалением?Если да, то как мы можем это проверить?
- Если в указанном выше случае есть проблема с Hibernate, как мы можем решить эту проблему?