Grails / GORM / Hibernate:引用未保存的瞬态实例的域实例的属性列表

时间:2012-10-02 00:03:22

标签: hibernate grails gorm

我经常做错事并在Grails中获得未保存的瞬态实例异常。我无法粘贴代码,如果我这样做,你可能会告诉我永远停止编程。但这是我想要帮助的一般情况:

我打电话给instanceOfMyComplicatedDomainClass.save(flush: true, failOnError: true),grails / hibernate让我无处不在:

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

我可以做什么(除了解我自己的代码)看看哪个属性是问题,因为我有几个同一个类?我想要一个我可以在.save()之前调用的方法println / log /无论该属性的名称是什么引起了所有的愤怒。让我举个例子:

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中是否有任何方法可以做类似的事情?

我问的是与我的其他问题不同的地方,列出所有未保存的瞬态:Get a list of all objects grails is planning to magically save

此外,我看到(并已阅读)其他〜15个“Hibernate:未保存的瞬态...”问题,我要求一个通用的解决方案,看看问题是什么,而不是我的具体解决方案我在今天的特定片段中做错了。教一个人钓鱼......可以这么说。

1 个答案:

答案 0 :(得分:2)

伯特今天发布了一些有趣的内容。

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

签出hibernate监听器。