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()我想要一个我可以在它之前调用的方法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 中是否已经有任何方法可以做类似的事情?

我在问一些与我的其他问题不同的问题来列出所有未保存的瞬态:获取所有对象的列表 grails 计划神奇地保存

此外,我看到(并已阅读)其他约 15 个“休眠:未保存的瞬态......”问题,我要求提供通用解决方案来查看问题所在,而不是针对我做错的具体解决方案在今天的特定片段中。教人钓鱼……可以这么说。

4

1 回答 1

2

伯特今天发布了一些有趣的东西。

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

检查休眠侦听器。

于 2012-10-06T00:54:24.690 回答