hibernate - Grails Gorm dynamicUpdate 不会改变更新查询
问题描述
我将 Grails (4.0.10) 与 Hibernate5 (7.0.4) 和 Postgres 数据库 (13) 一起使用。动态更新在旧的 grails 版本 (3.3.1) 中工作。升级后,动态更新不再起作用。
那里有一些对象,表上有许多字段和索引。因此,此表的更新每次都会写入所有字段。我找到了使用 dynamicUpdate true 的选项。所以我用
class InboundMessage extends Message {
static mapping = {
dynamicUpdate true
}
}
我在 Message 对象中使用了相同的代码。我记录了生成的查询。但更新查询不会改变。他们仍然在每次更新时更新所有字段。
这是示例代码:
InboundMessage msg = InboundMessage.get(447)
msg.userdefined1 = "test11"
println(msg.isDirty())
println(msg.listDirtyPropertyNames())
msg.save(flush:true)
以下是生成的查询(缩短):
Hibernate: select very long list of columns inner join message inboundmes0_1_ on inboundmes0_.id=inboundmes0_1_.id where inboundmes0_.id=?
Hibernate: update message set version=?, time_to_delete=?, client_address=?, .... where id=? and version=?
当我对其他域类使用动态时,它可以工作。仅更新了更改的字段。listDirtyPropertyNames 的输出仅显示更改的字段。isDirty() 是真的。
我究竟做错了什么?是因为 InboundMessage 扩展了消息对象吗?我们使用一个消息表和一个单独的入站消息表。
解决方案
推荐阅读
- microsoft-graph-api - 通过 Microsoft Graph 删除 One-Drive 项目的唯一权限
- html - 如何覆盖primeng样式?
- html - 控件之间需要水平和垂直间距
- javascript - 我可以依赖从未写入过的 JavaScript 对象文字的键顺序吗?
- javascript - 如何在一定时间后执行代码php
- sql - 将工作表名称添加为要在 Google 表格中查询的列
- machine-learning - Transformer 是如何双向的 - 机器学习
- node.js - 使用 Redbird 反向代理 HTTPS 站点及其在 node.js 服务器上的子域
- ansible - Ansible:同时注册作业 ID 和退出代码
- mysql - 使用一组新记录更新数据库表,在 UI 显示中没有任何延迟