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