Hibernate и ORA-01400: невозможно вставить NULL
У меня довольно простой сценарий, одна таблица, одна последовательность для автоматической генерации первичных ключей:
CREATE TABLE foo (event_id NUMBER(19,0)....
CREATE SEQUENCE event_seq
Часть отображения спящего режима выглядит следующим образом:
...
<id name="id" column="EVENT_ID" type="long">
<generator class="native">
<param name="sequence">event_seq</param>
</generator>
</id>
...
Хорошо работает без проблем в течение длительного времени. Но недавно я получил это:
ORA-01400: cannot insert NULL into ("TESTING"."FOO"."EVENT_ID")
Значит ли это, что Oracle не удалось сгенерировать порядковый номер для EVENT_ID?Что может быть причиной для этого? Видимо эта ошибка пришла из 64-битного Oracle, это может быть связано с проблемой? Удаление и воссоздание таблицы и последовательности не помогает, просто не хочет работать на этой конкретной машине. Что бы я ни делал, я не могу воспроизвести это, ошибка происходит от одного из пользователей, который в значительной степени недоступен.
Есть идеи?
--------------- Задача решена ---------------
Первоначальная проблема была обнаружена с Oracle 10.2.0.1.0 64-битной при использовании драйвера 10.2.0.1.0 на 32-битной ОС. После обновления драйвера до 11.2.0.2.0 проблема исчезла. Все зависит от виртуальных машин, если они работают как 32-битная или 64-битная система.
1 ответ
Oracle не генерирует автоматически порядковые номера при вставке в таблицу. Вы должны либо кодировать его во вставку, либо кодировать его в триггер, либо делать это в hibernate.
Я думаю, что спящий потребности <generator class="sequence">
если вы хотите, чтобы это произошло, или ваши настройки гибернации перестали думать, что вы имеете дело с базой данных Oracle