簡體   English   中英

Grails - not-null屬性引用null或transient值

[英]Grails - not-null property references a null or transient value

我有一些基本的grails域對象:

任務用戶

最近,我希望能夠為多個用戶分配任務。 所以我將此代碼添加到Task.groovy類:

static hasMany = [users: User]

static mapping = {
    users joinTable: [name: 'task_user', column: 'user_id', key: 'task_id']
}

因此,現在可以使用連接表將任務分配給多個用戶 - 連接任務和用戶表。 現在當我創建一個新任務時,它給了我錯誤信息:

“not-null屬性引用null或transient值:blah.User.address”

在生成的連接表“task_user”中,它只需要User對象中的user_id,所以我不明白為什么它抱怨其他用戶字段為空。 用戶對象將始終存在於數據庫中。 我不想完全加載每個用戶以創建新的任務。 我很確定它與級聯有關。

我想要的行為,如果刪除任務,應刪除task_user連接表中的相關條目。 我從不“希望”因保存任務而更新/刪除用戶對象。 我不知道該怎么辦。

固定

您需要使用User.load(id)來獲取對用戶對象的引用。 加載不像get沒有命中數據庫 - 它只是創建一個代理可以代替User對象的代理。 只要訪問id屬性 - 不訪問db。

您看到的錯誤的說明

在您的代碼中,您創建了一個未與hibernate連接的新用戶對象(transient)。 要將它連接到hibernate,您需要保存它或添加belongs_to屬性 - 這兩個屬性都會嘗試更新用戶表中的行,並將每個字段設置為null。 如果它是您正在創建的新用戶對象並希望將其自動保存,則需要設置belongs_to(〜to cascade)。

您最近修改了User表上的約束嗎? 我之前看過那些錯誤,通常是在我已經生成了模式之后我做了一個不可為空的屬性...我猜測表中是否已經存在一個空值,該屬性被修改為不可為空的模式-update無聲地失敗,你最終會遇到這樣的錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM