【发布时间】:2011-11-22 23:18:12
【问题描述】:
在保存休眠对象时,休眠中是否有设置忽略空值属性?
注意
就我而言,我通过 Jackson 将 JSON 反序列化为 Hibernate Pojo。
JSON 只包含 Pojo 的一些字段。如果我保存 Pojo,则不在 JSON 中的字段在 Pojo 中为 null 并休眠更新它们。
我遇到了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 并且只包含值不为空的列。
http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#mapping-declaration-class
如果您通过dynamic-update 在 XML 中定义它就够有趣了,文档中没有提到 NULL 值的处理。
dynamic-update(可选 - 默认为 false):
指定 UPDATE SQL 应该 > 在运行时生成,并且只能包含值已更改的列。
由于我同时使用注释 AND xml 配置,hibernate 似乎忽略了我的 dynamicUpdate=true 注释。
【问题讨论】:
-
您可以使用动态更新来避免 SQL 中出现尚未更新的属性,但通常建议仅在实体具有过多属性时使用此设置(列 > 50)[参考: Java Persistence with Hibernate 2006 edition]。 @hvgotcodes 正确地指出,如果字段永远不会被持久化,您不必映射字段。
标签: hibernate null hibernate-mapping hibernate-annotations