一尘不染

如何防止Hibernate更新NULL值

hibernate

保存hibernate对象时,hibernate中是否有设置可以 忽略 属性的 空值

注意
在我的情况下,我正在通过杰克逊将JSON反序列化为Hibernate Pojo。

JSON仅包含Pojo的某些字段。如果保存Pojo,则不在JSON中的字段在Pojo中为null,然后hibernate更新它们。

我遇到了updateable=false这个问题,但这不是100%的解决方案。
http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#entity-
mapping-
property

也许有人有另一个主意…

笔记2:

根据Hibernate Docs的dynamicUpdate 注释

dynamicInsert / dynamicUpdate(默认为false):
指定INSERT / UPDATE SQL应该在运行时生成,并且仅包含 其值不为null 的列。

http://docs.jboss.org/hibernate/core/3.6/reference/zh-
CN/html_single/#mapping-declaration-
class

如果您通过dynamic-update文档在XML中定义它,就不用说空值的处理了。

动态更新(可选-默认为false):
指定应在运行时生成UPDATE SQL,并且只能包含其值已更改的列。

由于我同时使用了注释 xml配置,因此hibernate状态似乎忽略了我的dynamicUpdate=true注释。


阅读 1222

收藏
2020-06-20

共1个答案

一尘不染

您应该首先使用数据库中的主键加载对象,然后在其顶部复制或反序列化JSON。

hibernate方式无法确定值null的属性是否已显式设置为该值或已排除。

如果它是一个插入,则dynamic-insert = true应该起作用。

2020-06-20