jetlinks / jetlinks-community

JetLinks 基于Java8,Spring Boot 2.x ,WebFlux,Netty,Vert.x,Reactor等开发, 是一个全响应式的企业级物联网平台。支持统一物模型管理,多种设备,多种厂家,统一管理。统一设备连接管理,多协议适配(TCP,MQTT,UDP,CoAP,HTTP等),屏蔽网络编程复杂性,灵活接入不同厂家不同协议等设备。实时数据处理,设备告警,消息通知,数据转发。地理位置,数据可视化等。能帮助你快速建立物联网相关业务系统。
https://www.jetlinks.cn/
Apache License 2.0
5.57k stars 1.67k forks source link

EntityPrepareModifyEvent 修改字段后 update 未生效 #505

Closed MoonBottle closed 3 months ago

MoonBottle commented 4 months ago

image

监听了 EntityPrepareModifyEvent 事件,修改了某个字段 image

最终执行的 sql 还是原先的字段,请问下这个事件不能修改字段值么 image

image

zhou-hao commented 3 months ago

好像 修复过。是最新的hsweb-framework和 easyorm版本吗?

debug看看这里

https://github.com/hs-web/hsweb-framework/blob/c3643ecfcafa778b065e26857b4e6b0c708d7c0c/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/events/EntityEventListener.java#L225-L232

MoonBottle commented 3 months ago

hsweb-framework 版本:4.0.17-SNAPSHOT easy-ormb 版本:4.1.2-SNAPSHOT 版本信息

步骤: 1、update 前设置了 -1 image 2、EntityPrepareModifyEvent 事件中给更新前后的实体分别设置成了-2 和 -3 image 3、debug 看 entry.setValue 是塞成功了,取到了 -3 image 4、最终执行的 sql 是 -1 image

另外发现个现象: 第 1 步 update 前不塞值的话,只在第 2 步中塞值,第 4 步最终执行的 sql 不会有相关字段 image

zhou-hao commented 3 months ago

在这个单元测试 复现看看

https://github.com/hs-web/hsweb-framework/blob/1ba900746587f17c6a512ed04733c0c1f7c33305/hsweb-commons/hsweb-commons-crud/src/test/java/org/hswebframework/web/crud/events/EntityEventListenerTest.java#L87-L105

MoonBottle commented 3 months ago

在这个代码仓库中复现了:https://github.com/MoonBottle/hsweb-framework 1、update 前赋值 2、监听事件并修改变量值 3、最终执行的 sql image

zhou-hao commented 3 months ago

试试这个PR https://github.com/hs-web/hsweb-framework/pull/288

MoonBottle commented 3 months ago

试试这个PR hs-web/hsweb-framework#288

测试了下,修改的值是预期的 -3,大佬👍 image

MoonBottle commented 3 months ago

但是今天又发现了一个新的现象,感觉似乎有点问题,步骤如下: 新增了一个 testColumn2 字段 1、使用 .setNull(EventTestEntity::getTestColumn2) 2、预期的 sql 是正常的执行了 setnull 3、但是在 EntityModifyEvent 中 after 对象的 testColumn2 字段值变成了 0,预期这里也是 null 值

测试代码还是在这个仓库中:https://github.com/MoonBottle/hsweb-framework

image

zhou-hao commented 3 months ago

~字段类型是包装器类型还是基本数据类型~

我再看看..

zhou-hao commented 3 months ago

再试试

zhou-hao commented 3 months ago

不过目前不能通过EntityPrepareModifyEvent设置null值

MoonBottle commented 3 months ago

不过目前不能通过EntityPrepareModifyEvent设置null值

抱歉,我有点没说清楚,现在这个现象和 EntityPrepareModifyEvent 没有关系了,是一个单独的问题

刚才又试了下,setNull 似乎不生效了,最终执行的 sql 中没有 set null 的语句

已确认刷新过 maven

image

zhou-hao commented 3 months ago
image image
MoonBottle commented 3 months ago

奇怪,我本地确实不行,maven 也刷新了

image

测试代码地址:https://github.com/MoonBottle/hsweb-framework/blob/358e783a7ffc4ec51848afa3cb1e4d3eb9bcc14f/hsweb-commons/hsweb-commons-crud/src/test/java/org/hswebframework/web/crud/events/EntityEventListenerTest.java#L88

zhou-hao commented 3 months ago

代码 没同步完? https://github.com/hs-web/hsweb-framework/pull/288/commits/74d7421e53401b3df7db439a9bb67b39f3335648

MoonBottle commented 3 months ago

代码 没同步完? hs-web/hsweb-framework@74d7421

抱歉抱歉,我没注意到 PR 有新的 commit,代码没同步完

同步后测试成功了,大佬🐂🍺,非常感谢!🙏

zhou-hao commented 3 months ago

好的。没有问题我就合并了。