2010-12-10 2 views
5

Я использую Spring Hibernate с HibernateSupportDao, когда я пытаюсь отправить несколько строк данных для хранения в моем db, он поднимает DataIntegrityViolationException в определенной строке. Тот же самый сценарий остался в задаче в той же таблице. Я не понимаю, даже когда я использую тот же код для текущей задачи. Почему был выброшен DataIntegrityViolationException и как я могу это исправить?Как мы можем решить DataIntegrityViolationException в Spring Hibernate?

ответ

6

Directly from the API:

Исключение брошено при попытке вставить или результаты данных обновления в нарушение ограничения целостности. Обратите внимание, что это не чисто реляционная концепция; большинству типов баз данных требуются уникальные первичные ключи.

В основном это означает, что hibernate пытался что-то сделать, но в базе данных возникло исключение. Наиболее распространенным случаем может быть то, что вы удаляете родителя, но не удаляете дочернего с внешним ключом этого родителя.

Каковы ваши настройки на переходный период (например, каскад)?

+0

здесь я использую Spring hiernate Аннотации и отношения между таблицами, я поддерживал отношение ManytoOne с режимом выборки как EAGER. здесь один момент - когда я работаю над одной таблицей с некоторой другой операцией вроде: я получаю данные таблицы и вношу некоторые изменения, когда я отправляю, предыдущие целые данные должны быть удалены, а новые данные, которые я модифицирован, собираюсь хранить. эта задача успешно работала. в этом случае я также могу добавить новую строку на странице. – Naresh 2010-12-10 15:20:09

2

Когда вы сталкиваетесь с этим исключением при выборе некоторых полей из таблицы, причиной может быть длина одного из полей в инструкции select. проверьте все длины полей выбора и сравните их с описанием таблицы. любое поле нарушило бы ограничение поля.

1

DataIntegrityViolationException также может нарушать уникальное ограничение на базу данных (то есть альтернативный ключ). Проверьте, если ваши вставленные строки данных содержат дубликаты данных, которые нарушают такое уникальное ограничение.

+0

Вопрос об этом. Это хорошая практика для обработки дублированных валидаций из db, а не из самого приложения? – jscherman 2015-08-04 18:30:28

0

если импортировать базу данных из где-то вы должны принять данных папку сервера тоже, и изменить этот данных папку в папку данных сервера.

0

Я обрабатываю DataIntegrityViolationException в ExceptionInfoHandler, обнаруживая вхождения БД в сообщение с первопричиной и преобразовывая его в сообщение i18n через . См. Код здесь: https://stackoverflow.com/a/42422568/548473

Смежные вопросы