我收到了暫時的實例錯誤,我無法完全解決(請參閱底部的UPDATE)。我有類:grails - 未保存的暫時實例錯誤
class Order {
static hasMany = [products: Product, transactions: MoneyTransaction]
...
static constraints {
transactions(minSize: 1) // order must have at least an authorization MoneyTransaction
...
}
}
class MoneyTransaction {
Order order
...
static constraints = {
order(nullable: true)
...
}
}
我的控制器代碼是
MoneyTransaction mt = new MoneyTransaction(...)
...
if (!mt.save(flush: true)) { log, render an error } // no error occurs
else {
println "mt saved, id: ${mt.id}" // prints out mt id fine
Order order = new Order(...)
...
order.addToTransactions(mt)
mt.order = order
if (!order.save(flush: true)) { log, render an error } // no error occurs
else {
println "order saved, id: ${order.id}" // prints out order id fine
// a method is called that creates a second MoneyTransaction that does the capture of
// the previous authorization, this method essentially does:
MoneyTransaction capt = new MoneyTransaction(...) // *** order is not set here ***
if (! capt.save()) { log, render an error } // no error occurs
println "capt saved, id: ${capt.id}" // prints out capt id fine
mt.relatedAction = "..." // this is a MoneyTransaction String field
if (!mt.save(flush: true)) { log, render an error } // get error
錯誤是:org.hibernate.TransientObjectException:對象引用一個未保存的瞬態的實例 - 沖洗之前保存的瞬態的實例:momentum.Order
我看了一些其他的帖子,我沒有使用任何findBy(),也打開了休眠記錄,但沒有透露任何東西。任何錯誤是什麼想法?
* UPDATE:
capt.order = mt.order
我省雖然我能做到這一點之前:此錯誤可能由上尉上面保存前,即添加行上尉複製(設置)的順序進行解析capt,我不清楚爲什麼這是一個問題,如果我不設置這個。如果我沒有設置它,note capt可以很好地保存,但mt的最後一秒保存會產生上述錯誤。
[版本的Grails 1.3.7]
*更新2:我刪除了capt.save以上,但我得到同樣的MT保存錯誤。這似乎表明這兩個實例與mt.save問題無關。