一時的なインスタンスエラーが発生しました。完全に解決できませんでした(下のUPDATEを参照してください)。私はクラスを持っている:org.hibernate.TransientObjectException::オブジェクトが保存されていない一時的なインスタンスを参照する - フラッシュする前に一時的なインスタンスを保存します。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
エラーがあるmomentum.Order
私はいくつかの他の投稿を見てきましたが、findBy()は使用されていませんでした。また、休止状態のログを有効にしましたが、何も表示されません。どのようなエラーのアイデアですか?
* UPDATE:
capt.order = mt.order
私は保存する前に、私はこれを行うことができますが:CAPTは、すなわち行を追加し、上記保存される前に、このエラーはCAPTで(設定)の順序をコピーすることによって解決することができますキャプション、私はこれを設定しなければ、なぜそれが問題であるかはっきりしない。私がそれを設定しなければ、キャプチャは正常に保存されますが、mtの最後/ 2回目のセーブでは上記のエラーが発生します。
[バージョンのGrails 1.3.7]
* UPDATE 2:私は上記のcapt.saveを削除し、私は同じMTがエラーを保存し得ます。これは、これら2つのインスタンスがmt.saveの問題まで関連していないことを示すように見えます。