我正在编写一个小型Grails应用程序,并且在运行以下相当简单的代码时,我继续获得StaleObjectStateException:s约占“
createfoo”调用的1/10:th。很可能我错过了使用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()
}
}
}
我对GORM最佳做法的疑问:
“ if-validate()-then-save()-else-discard()”是否是在GORM中持久保存新对象的正确方法?
是否应该验证所有要保存的对象()?即我应该同时验证上述代码中的Foo对象和User对象吗?验证用户对象会隐式检查Foo对象的状态吗?
我该怎么做才能得到StaleObjectStateException?:-)
GORM /hibernate异常:
原因:标识符为[15]的类[Foo]的对象:乐观锁定失败;嵌套的异常是org.hibernate.StaleObjectStateException:行已被另一个事务更新或删除(或未保存的值映射不正确):[Foo#15]
我不确定您为什么遇到问题,但是域对象上有一个合并方法。它使您可以将当前对象重新附加到当前持久性上下文。
我对您的Foo,对User对象所做的自定义或用于重现此功能的grails / java版本了解得不够多。
我认为这与您在用户对象上进行的刷新有关,这导致数据库版本被更新(因此不同步),但是我不确定。
另外,我相信基于该帖子的评论,验证然后丢弃行为正在改变,而在grails
1.1中则没有必要
问题内容: 我正在尝试在GORM中定义树结构。这是我的模型: 插入似乎可以正常工作,但是当我无法加载具有多个级别和子级别的Tree时。我想我在关系中错过了一些东西:-树应该引用rootLevel(以及可选地引用所有子级别)-一个级别应该引用其父级别,其子级别和全局父树 您能指出我正确的方向以获得这样的树结构吗?谢谢 问题答案: 我最终得到了这个解决方案(感谢朋友): 和 我错过了Tree和Leve
问题内容: 是否可以使用GORM标准执行“输入”标准。我正在寻找以下SQL的等效项 如果可能的话,我猜语法会像这样: 问题答案: Grails createCriteria文档包含一个使用子句的示例: 该文档包括以下说明: 注意:“ in”是一个时髦的保留字,因此必须用引号将其转义。
我需要在Grails中使用GROUP_CONCAT聚合函数,最好来自HQL,但也可以使用标准。 我有以下疑问: } 还是没运气。我得到: -[METHOD_CALL]methodnode:'('+-[METHOD_NAME]identnode:'group_concat'{originaltext=group_concat}-[EXPR_LIST]sqlnode:'expr list'-[DOT]
我们有一个高并发的Grails应用程序,有几个工作线程试图更新同一个域对象Message,但是在服务中使用静态锁Message.lock(msg.id)实现的悲观锁定解决方案(transactional设置为false)会导致许多< code > HibernateOptimisticLockingFailureException 的实例。 静态锁如何导致?我的理解是,静态锁将读取最新的持久版本。
grails GORM的SQL标准是什么 订单表: 订单ID CustomerID 订购日期 客户表: CustomerID 客户名 联系人姓名 国家 请注意,“Orders”表中的“CustomerID”列指的是“客户”表中的“CustomerID”。上面两个表之间的关系是“CustomerID”列。然后,我们可以创建以下SQL语句(包含一个INNER JOIN),它选择两个表中具有匹配值的记录
找到了以下场景的部分答案,但需要进一步澄清。 有下列情况: 用java编写的域类 我想做的事情: 创建一个grails应用程序,它可以执行以下操作: 使用java域类作为grails域类 通过GORM将java域类映射到DB 能够从groovy域类创建java域类,以便能够将其发送到java服务器进行处理,然后接收java类响应并将其转换为groovy类,以便使用GORM存储在DB中映射 基本上有