首页 > 解决方案 > 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 扩展了消息对象吗?我们使用一个消息表和一个单独的入站消息表。

标签: hibernategrailsgrails-orm

解决方案


推荐阅读