我被困在這個問題。代碼看起來OK,我(顯然我失去了一些東西,但問題是它是什麼?)Grails級聯行爲
我有一個工程類
def class project{
...
Manager manager
}
這是人與經理類定義
def class Person{
String firstName
String lastName
}
def class Manager extends Person{
static hasMany = [ projects: Project]
}
關係很簡單 - 一個項目有一個經理,一個經理有很多項目。據我所知,在一對多關係中,節省了級聯,因爲它是雙向的一對多。但是,當我做到這一點
Project project = new Project()
Manager mgr = new Manager(...)
project.manager = mgr
project.save()
由我收到以下錯誤 引起:org.hibernate.TransientObjectException:對象引用一個未保存的瞬態的實例 - 沖洗之前保存的瞬態的實例:經理
當我做這
Project project = new Project()
Manager mgr = new Manager(...)
project.manager = mgr
project?.manager.save()
project.save()
它工作得很好。但我認爲項目?.manger.save()不應該是必需的!
感謝您的回答。是的儲蓄管理人員首先做的伎倆。但belongsTo沒有幫助。這是正確的方法做到這一點 i)刪除管理器經理,只是有 靜態belongsTo = [經理:經理]或靜態belongsTo =經理 ii)保持經理經理和擁有靜態belongsTo = [經理:經理]或靜態belongsTo =管理器。 順便說一句,我試過了,它不起作用。現在快速修復工作 – Paras 2010-07-16 21:57:43
嗯我認爲正確的方法是挽救一方。 「在雙方一對多的情況下,許多方面定義了belongsTo,然後級聯策略被設置爲一方爲」全部「,而另一方爲」無「。」即使對於屬於,對於許多方面來說級聯也是無效的。如果一方尚未執行,先保存多方將不起作用。 我認爲這是有道理的,因爲通常情況下,您會向系統添加一個管理器,保存它,然後添加項目。雖然我可以看到你會同時做這兩件事的情況。 – hvgotcodes 2010-07-16 22:02:23