gpt4 book ai didi

在 grails 中 hibernate NonUniqueObjectException

转载 作者:行者123 更新时间:2023-12-02 14:55:17 26 4
gpt4 key购买 nike

从 grails webapp 添加记录时,我收到 NonUniqueObjectException。发生这种情况是因为 webapp 的用户能够添加记录,并且他们填写的字段之一是域对象/db 表的 PrimaryKey。 Hibernate 将在创建域对象后立即检查数据库以查看是否存在具有该 ID 的记录(AFAIK)。因此,它在发现冲突时会引发此错误。

我的第一 react 是在用户不知道的对象上添加一个新的 PK 字段,例如 GUID。虽然这适用于我们拥有的许多域对象,但我们也有一些指向无法更改的遗留表的域对象。这使得为​​此目的添加列是不切实际的。

我的下一个解决方案是检查用户传递给 webapp 的 ID 并检查它是否已经存在。如果存在,则回传一条消息,通知他们记录已经存在。这个解决方案肯定会奏效,但与对域对象具有所有约束的模型背道而驰。这也可以在 try/catch 中完成,以获得类似的结果。

我的问题是,我可以推迟 hibernate 检查数据库中是否已存在对象,直到节省时间?域对象对其具有唯一约束,并且在保存时会违反此约束并允许调用 messages.properties 消息。此外,任何其他想法将不胜感激。

更新:

我在最初的帖子中犯了一个错误。调用 save 时抛出错误。然而,这指向了一个不同的问题。域对象的唯一约束似乎没有被调用。即使“唯一”是域 ID 的一部分,域对象也会以某种方式通过验证。这是否意味着域对象的 ID 字段上的约束“唯一”没有以与在其他对象上验证相同的方式验证?

最佳答案

您看过 grails 域类中的 onSave() 方法吗?也许这会有所帮助。

关于在 grails 中 hibernate NonUniqueObjectException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8057021/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com