Hibernate和ORA-01400:无法插入NULL

时间:2011-05-12 05:16:49

标签: oracle hibernate ora-01400

我有一个相当简单的场景,一个表,一个用于自动生成主键的序列:

CREATE TABLE foo (event_id NUMBER(19,0)....
CREATE SEQUENCE event_seq

部分hibernate映射如下所示:

...
<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,它可能与问题有关吗?删除和重新创建表和序列没有帮助,它只是不想在该特定机器上工作。无论我做什么,我都无法重现,错误来自其中一个几乎无法访问的用户。

有什么想法吗?

--------------- 问题解决了 ---------------

在32位操作系统上使用驱动程序10.2.0.1.0时,使用Oracle 10.2.0.1.0 64位检测到原始问题。一旦驱动程序更新到11.2.0.2.0,问题就消失了。如果它们运行的​​是32位或64位系统,这一切都取决于VM。

1 个答案:

答案 0 :(得分:1)

Oracle不会自动在表插入上生成序列号。您要么必须将其编码到插入中,将其编码为触发器​​,要么进行休眠操作。

我认为hibernate需要<generator class="sequence">如果你想要它,或者你的hibernate设置已经不再认为你正在处理Oracle数据库