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



我经常出错,并在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/无论引起所有huff的属性的名称是什么。让我举一个例子:

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个"休眠:未保存的瞬态…"问题,我正在寻求一个通用的解决方案来了解问题所在,而不是针对我在今天的特定片段中做错了什么的具体解决方案。教人钓鱼。。。可以这么说。

Burt今天发布了一些有趣的消息。

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

签出hibernate侦听器。

最新更新