hibernate - 调用 findWhere 时 Grails 抛出 NonUniqueObjectException

标签 hibernate grails orm grails-orm

我正在使用分配了 id 生成器的域类构建一个 grails 应用程序(也就是说,它们不会自动生成)。假设我有一个域类 Parent 与 static hasMany = [children: Child]和域类 Child。

我正在尝试使用 Parent.findWhere(propertyMap) 定位 Parent 的实例,但我得到一个 非唯一对象异常 表示已经有一个与此 session 关联的子实例,其 id 为 0。我的 propertyMap 不包含 id 的条目。

现在,每当我尝试在 session 中保存一个类的两个实例而不设置它们的 id 时,我已经习惯了得到这个错误。因为 id 不是自动生成的,所以它们默认为零,这允许保存第一个,第二个抛出错误,因为 id 是第一个的副本。令我惊讶的是,我试图找到一个实例,而不是保存一个......有谁知道可能导致这种行为的原因以及我如何在仍然使用我的属性图进行搜索的同时绕过它?

最佳答案

事实证明,这是一个时髦的语法糖问题。我在打电话 findWhere like

Parent.findWhere([ firstProperty: "firstValue", secondProperty: "SecondValue" ])

但显然我应该使用
Parent.findWhere( firstProperty: "firstValue", secondProperty: "SecondValue" )

(注意没有方括号)。我不知道为什么这会有所作为,但 findWhere 现在按预期工作。任何可能知道它为什么会这样表现的人都会加分。

关于hibernate - 调用 findWhere 时 Grails 抛出 NonUniqueObjectException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11302615/

相关文章:

java - 使用 hibernate 存储/从 MySql 检索 JSON 数据时出现 UTF-8 问题

hibernate - 如何使用 JPA/Hibernate 映射 XMLType

grails - 从主应用程序向grails插件域类添加行为(关系)?

java - 有没有办法使用 Hibernate 有条件地插入?

java - 当我保存实体时,从属集合会重复

Grails 参数长数组

Grails 如何将多个操作定向到同一个 View ?

mysql - 外部右连接在 NHibernate 中不起作用

php - Laravel Eloquent 困难关系查询

java - Hibernate 和 JPA,用什么,用在哪里?