0

私は常に間違ったことをしており、Grails で保存されていない一時的なインスタンス例外を取得しています。コードを貼り付けることはできません。貼り付けたとしても、プログラミングを永久にやめるように言われるでしょう。しかし、ここに私が助けてほしい一般的な状況があります:

私が呼び出すinstanceOfMyComplicatedDomainClass.save(flush: true, failOnError: true)と、grails/hibernate はどこにでもあるものを提供してくれます:

object references an unsaved transient instance - save the transient instance before flushing: soexample.SomeOtherDomainClass

同じクラスを持つプロパティがいくつかある場合、どのプロパティが問題であるかを確認するには、(自分のコードを理解する以外に) どうすればよいですか? / /すべてのハフを引き起こしているプロパティの名前が何であれ、直前に呼び出すことができるメソッドが必要です.save()。例を挙げましょう:printlnlog

class MyComplicatedDomainClass {
  SomeOtherDomainClass dataContents
  SomeOtherDomainClass moreDataContents


  static constraints = {
    dataContents(nullable:true)   
    moreDataContents(nullable:true) 
  }      
}

class SomeOtherDomainClass {
  String randomData
}

...

def someRandomMethodAnywhere(){
  def newComplicated = new MyComplicatedDomainClass()
  def imUnsaved = new SomeOtherDomainClass(randomData:'lalala')
  def imOK = new SomeOtherDomainClass(randomData:'lalala2').save() 
  newComplicated.dataContents = imUnsaved
  newComplicated.moreDataContents = imOK
  //At this point newComplicated references an unsaved transient, "imUnsaved".  If I try to save newComplicated it will fail.
  def badPropertyList = findUnsavedTransients(newComplicated)
  assert badPropertyList.contains("dataContents")  //So findUnsavedTransients method returns a list of the names of the properties referencing the unsaved transients
}

findUnsavedTransients をどのように記述すればよいでしょうか。同様のことを行うHibernateにすでにメソッドはありますか?

保存されていないすべてのトランジェントをどこにでもリストするために、他の質問とは異なる何かを求めています:グレイルが魔法のように保存する予定のすべてのオブジェクトのリストを取得

また、他の〜15の「Hibernate:保存されていない一時的...」の質問を見て(そして読んだ)、私が間違っていることに対する特定の解決策ではなく、問題が何であるかを確認するための一般的な解決策を求めています今日の特定のスニペットで。男に釣りを教えて…いわば。

4

1 に答える 1

2

今日、バートはそれについて興味深いことを投稿しました。

www.burtbeckwith.com/blog/?p=1570

休止状態のリスナーをチェックアウトします。

于 2012-10-06T00:54:24.690 に答える