2013-07-29 62 views
0

我有映射到oracle數據庫表的Object類。 在這個類中,一列在數據庫中有一個默認值。我用這個: @Column(name =「FK_STATUS」,nullable = false,columnDefinition =「int default 1」) 數據庫中的列類型是Number。但我得到「不能在FK_status中插入null」的錯誤。 請幫忙。默認值在hibernate4

+0

你有Java字段上的任何驗證註釋,比如'@NotNull'? – sp00m

+0

不,我沒有使用@notNull或任何其他驗證註釋 – AFF

回答

1

因爲我沒有在您的行中看到任何語法錯誤,所以沒有太多的H-3知道我正在使用H-3。

這可能是一個修復,不完全解決您的問題。使用variable的默認值。

private Integer fkStatus= 1; 
+0

這是真實的,但不是在數據庫中處理的默認值。當我更改數據庫中的默認值時,我必須更改源代碼 – AFF

+1

@NGS True,但在源代碼中也有'@Column(name =「FK_STATUS」,nullable = false,columnDefinition =「int default 1」)'write ? –

0

的columnDefinition將工作

columnDefinition = "int default 1" (should be "default 1") 

,但你必須先重新創建數據庫表。這將設置你的列設置爲空值作爲INT 1

那麼,你應該通過

的persistence.xml

<property name="hibernate.hbm2ddl.auto" value="create-drop"/> 

重建DB或做手工

update {TABLE} 
set FK_STATUS = 1 
where status is null; 

alter table {TABLE} modify (FK_STATUS default 1 NOT NULL); 
0

@NGS,諸如unique,nullable,default等約束是JPA/Hibernate在表創建過程中使用的關鍵字。它在創建表之後沒有任何意義。 例如,如果首先創建一個表格作爲非唯一的列,並且如果您計劃通過提供註釋來控制列的唯一性,則不起作用。

爲表創建提供所有這些類型的元數據。

+0

我不想更改結構,我已經創建了我的表並且它的一個字段具有由DB生成的默認值。我將使用hibernate爲其設置值,但會出現「無法插入空值」錯誤。 – AFF

0

我願做小幅盤整在你的Hibernate映射列代碼,請參見下面

@Column(name = "FK_STATUS" ,nullable = false, columnDefinition = "int(10) default 1") 

使用這個,讓我知道,如果這不是你的代碼的工作

+0

我用它,它不工作! – AFF

+0

請爲我們提供您的實體類代碼和您的異常的堆棧跟蹤,您將獲得。 – Ashish