Hibernate и ORA-01400: невозможно вставить NULL - PullRequest
3 голосов
/ 12 мая 2011

У меня довольно простой сценарий, одна таблица, одна последовательность для автоматической генерации первичных ключей:

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 Ответ

1 голос
/ 12 мая 2011

Oracle не генерирует автоматически порядковые номера при вставке в таблицу.Вы должны либо кодировать его во вставку, либо кодировать его в триггер, либо делать это в hibernate.

Я думаю, что hibernate нуждается в <generator class="sequence">, если вы хотите это сделать, или ваши настройки hibernate перестали думать, что выработа с базой данных Oracle

...