当前位置: 首页 > 面试题库 >

如何防止Hibernate更新NULL值

潘弘博
2023-03-14
问题内容

保存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注释。


问题答案:

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

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

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



 类似资料:
  • 问题内容: 我有一个简单的hibernate查询,例如: 没什么花哨的,但是它在一个相当大的事务中被多次调用(持续一秒钟,可能会加载数十个或数百个实体)。Profiler显示很多时间花在: 换句话说-在运行实际查询之前刷新会更改。 我能以某种方式完全阻止Hibernate进行刷新吗? 如果没有,我该怎么做才能使其更快? 问题答案: 默认情况下,hibernate在会话期间发出查询之前刷新(Flus

  • 本文向大家介绍MongoDB中如何做到更新并防止覆盖,包括了MongoDB中如何做到更新并防止覆盖的使用技巧和注意事项,需要的朋友参考一下 让我们创建一个包含文档的集合- 在find()方法的帮助下显示集合中的所有文档- 这将产生以下输出- 以下是要更新的查询- 在find()方法的帮助下显示集合中的所有文档- 这将产生以下输出-

  • 我的存储库中有一个方法: 此方法从api收集结果,然后将结果保存到数据库中,并返回一个flowable,其中这些位置按id从数据库中检索为: 现在,每次我改变其中的一个对象,我可以看到整个我的应用程序的变化。 为什么会这样?nt应该把这两种来源的排放结合起来吗?

  • 问题内容: 我正在使用hibernate模式开发应用程序。当我尝试创建登录页面时,出现Sql Injection问题。我有以下代码: 在这种情况下,如何防止Sql Injection?loginInfo表的创建表语法如下: 问题答案: 您还有其他选择,请参阅mkyong的这篇不错的文章。

  • 我正在做分类帐模块。在这个过程中,我必须按顺序完成这些任务 从源中选择余额(table 1 row1) 从目标中选择余额(table 1 row2) 用一些逻辑修改余额 更新源的余额(table 1 row1) 更新目标余额(table 1 row2) 提交更改 将事务插入到事件表中。 在多线程环境中,线程在前一个线程更新和提交之前获得余额。在Postgres中,锁被强加给正在被访问的行,直到线程