我经常做错事并在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:未保存的瞬态...”问题,我要求一个通用的解决方案,看看问题是什么,而不是我的具体解决方案我在今天的特定片段中做错了。教一个人钓鱼......可以这么说。
答案 0 :(得分:2)
www.burtbeckwith.com/blog/?p=1570
签出hibernate监听器。