【发布时间】:2011-08-23 20:00:25
【问题描述】:
我有一个相当简单的场景,一张表,一个序列用于自动生成主键:
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,它可能与问题有关吗?删除并重新创建表和序列并没有帮助,它只是不想在那台特定的机器上工作。无论我做什么,我都无法重现这一点,错误来自几乎无法访问的用户之一。
有什么想法吗?
--------------- 问题解决了 ---------------
在 32 位操作系统上使用驱动程序 10.2.0.1.0 时检测到 Oracle 10.2.0.1.0 64 位的原始问题。一旦驱动程序更新到 11.2.0.2.0,问题就消失了。这完全取决于虚拟机是作为 32 位还是 64 位系统运行的。
【问题讨论】:
-
检查连接到数据库的用户(如您的应用服务器连接池中配置的)是否对序列具有适当的权限。如果没有,则授予他们:
grant select on event_seq to <<user>>;
标签: oracle hibernate ora-01400