2011-12-21 30 views
3

我收到了暫時的實例錯誤,我無法完全解決(請參閱底部的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問題無關。

回答

0

無論哪種方式的問題是,當你調用

mt.save() 

到那個時候所包含的Order對象是一個短暫的未保存的狀態。在嘗試保存「mt」之前嘗試保存它。

order.save() 
mt.order = order 
mt.save() 

進一步猜測(只是猜測):它可以是你調用單交易服務方法,其中兩者之間會作廢當前會話,這就是爲什麼訂單處於過渡狀態。之前我曾遇到類似Grails 1.3.7的問題。

相關問題