2011-05-12 43 views
3

我有相當簡單的場景,一個表,用於自動生成主鍵一個序列:Hibernate映射的Hibernate和ORA-01400:不能插入NULL

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位系統運行。

+0

檢查是否連接到數據庫(如在應用程序服務器的連接配置的用戶池)擁有序列的適當權利。如果沒有,然後授予他們:'授予select event_seq到<>;' – 2011-05-12 11:44:20

回答

1

Oracle不會自動生成表格插入的序列號。您必須將其編碼到插入中,將其編碼到觸發器中或者進行休眠。

我覺得Hibernate需要<generator class="sequence">如果你想讓它做,或你的休眠設置已停止思考你正在處理一個Oracle數據庫

+0

它工作正常,我最初發布的發電機,但不是在特定的機器上。 EVENT_SEQ索引被創建並增加了所有的權利,我試着用像馬丁這樣的權限來搗鼓,但沒有運氣 - 在我的結尾,一切正常。我使用Oracle 10g express,問題機器也是10g,但是64位..這是迄今爲止我可以告訴日誌的唯一區別。 – Dima 2011-05-12 13:00:14