kno*_*orv 7 grails hibernate grails-orm
我正在编写一个小的Grails应用程序,并且在运行以下相当简单的代码时,我继续获得StaleObjectStateException:s大约1/10:对"createfoo"的调用.最有可能的是我错过了使用GORM的最佳方式.
这是代码:
def viewfoo = {
session.user.refresh()
// ...
}
def createfoo = {
session.user.refresh()
var user = session.user
if (param["name"]) {
var newFoo = new Foo()
newFoo.name = param["name"]
if (newFoo.validate()) {
newFoo.save()
if (user.validate()) {
user.addToFoos(newFoo)
} else {
user.discard()
}
} else {
newFoo.discard()
}
}
}
Run Code Online (Sandbox Code Playgroud)
关于GORM最佳实践的问题:
"if-validate() - then-save() - else-discard()"是否正确地在GORM中保留新对象?
我应该验证我要保存的所有对象()吗?即我应该在上面的代码中验证Foo-object和User-object?验证User-object会隐式检查Foo对象的状态吗?
我该怎么做才能得到StaleObjectStateException?:-)
GORM/Hibernate异常:
Caused by: Object of class [Foo] with identifier [15]: optimistic locking failed; nested exception is org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [Foo#15]
我不太确定您遇到问题的原因,但域对象有一个合并方法。它允许您将当前对象重新附加到当前持久上下文。
我不太了解您的 Foo 是什么,或者您对 User 对象做了什么自定义,或者您正在使用的 grails/java 版本能够重现这一点。
我认为这与您对用户对象所做的刷新有关,这导致数据库版本更新(因此不同步),但我不能确定。
另外,我相信根据这篇文章的评论,先验证后丢弃的行为正在发生变化,并且在 grails 1.1 中不太必要
| 归档时间: |
|
| 查看次数: |
7769 次 |
| 最近记录: |