Гибернация и ORA-01400: не удается вставить NULL

#oracle #hibernate #ora-01400

#Oracle #гибернация #ora-01400

Вопрос:

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

 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, может ли это быть связано с проблемой? Удаление и воссоздание таблицы и последовательности не помогает, они просто не хотят работать на этом конкретном компьютере. Что бы я ни делал, я не могу воспроизвести это, ошибка исходит от одного из пользователей, который в значительной степени недоступен.

Есть идеи?

————— Проблема решена —————

Исходная проблема была обнаружена в 64-разрядном Oracle 10.2.0.1.0 при использовании драйвера 10.2.0.1.0 в 32-разрядной ОС. Как только драйвер был обновлен до 11.2.0.2.0, проблема исчезла. Все зависит от виртуальных машин, работают ли они как 32-разрядная или 64-разрядная система.

Комментарии:

1. Проверьте, имеет ли пользователь, который подключается к базе данных (как настроено в вашем пуле подключений к серверу приложений), надлежащие права на последовательность. Если нет, то предоставьте их: grant select on event_seq to <<user>>;

Ответ №1:

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

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

Комментарии:

1. Он отлично работает с генератором, который я опубликовал изначально, но не на этом конкретном компьютере. Индекс EVENT_SEQ создается и увеличивается, все в порядке, я пытался повозиться с разрешениями, как предложил Мартин, но безуспешно — с моей стороны все просто работает. Я использую Oracle 10g express, проблемный компьютер также 10g, но 64-битный .., это единственное отличие, которое я пока смог определить из журналов.