2014-01-20 49 views
1

MySQL表默認值:休眠/的SQLException:字段不具有使用所生成的

CREATE TABLE `actors` (
    `actorID` INT(11) NOT NULL, 
    `actorName` VARCHAR(255) NOT NULL, 
    PRIMARY KEY AUTO_INCREMENT (actorID) 
); 

映射類:

​​

錯誤:

ERROR: Field 'actorID' doesn't have a default value 

此錯誤擊中時試圖創建一個新的Actor對象,並將其保存到數據庫中。

我試過使用其他生成策略,並刪除/重建表/整個數據庫,根據類似問題的答案。到目前爲止沒有運氣。

謝謝您的時間, 塞繆爾·史密斯

編輯:刪除表和使用shippi所示的SQL語法似乎來解決這個問題,我重新創建它。

+0

你可以通過mysql工作臺插入到表中而不指定actorID嗎? – Taylor

+0

Errrhh ...我前一陣子遇到了這個問題。這真的很難找到。如果你吹掉'@ Column'註釋會發生什麼?這是不需要恕我直言。 – Bart

回答

2

只是嘗試使用

@GeneratedValue(strategy=GenerationType.AUTO) 
@Id 
@Column(name = "actorID") 
private int actorID; 

這應該可以解決您的問題。如果保存,則保留actorsID爲null。

確保數據庫工作正常,嘗試編寫插入語句而不插入標識並查看純插入是否正常工作。如果直接插入正在數據庫中工作,您可以開始排查休眠問題。

和一個小點,我用它來定義在同一行的PH和自動遞增,其中定義列:

actorID INT(11)NOT NULL AUTO_INCREMENT PRIMARY KEY,

但它應該工作無論哪種方式。

+0

小細節,但* int *不能* null *。它將被初始化爲零。 – Bart

+0

好的,所以我將變量映射更改爲上面描述的內容,並且它沒有任何影響。但是,我放棄了整個數據庫,並重新構建了所有的表,這次使用的SQL語法與您在此處顯示的類似,並且完美地工作。我不認爲它本身是語法改變,但因爲它與以前有很大的不同,所以它強制刷新某處解決問題的地方(AUTO_INCREMENT最初是後來添加的,所以也許剛剛沒有緩存新的數據庫或其他東西。 ..我不太確定) –

0

您的錯誤出現在您的表格定義中。

必須是:

CREATE TABLE `actors` (
    `actorID` INT(11) NOT NULL AUTO_INCREMENT, 
    `actorName` VARCHAR(255) NOT NULL, 
    PRIMARY KEY AUTO_INCREMENT (actorID) 
); 

您在actorId來錯過了AUTO_INCREMENT。

+0

這將仍然會導致相同的錯誤,因爲'actorName'也沒有定義默認值。 – BARJ

+0

在數據庫中創建新記錄時,通常不會手動設置ID。但是你必須設置所有其他列,特別是無空列。 沒有意義爲列actorName指定默認值。 –