谁能向我解释为什么 Hibernate 默认不设置 @DynamicInsert
注释并允许实体根据当前设置的属性生成 INSERT?
不使用 @DynamicInsert
并因此默认包含所有实体属性的原因是什么?
最佳答案
@jb-nizet 说的。
此外,dynamic-insert="true"
在我看来是个坏主意。
从生成的 SQL 中跳过 null 字段,很快您会发现自己处于声明列 not null default
的情况,这实际上导致持久数据不同于实体数据 hibernate 知道。这会导致挫败感,并可能使您求助于昂贵的 session.refresh()
调用。
例如假设列
MESSAGE varchar(64) not null default ''
然后您为映射到此列的属性保存一个具有空值的实体。
使用动态插入,您最终会得到一个实体,该实体在内存中的属性消息具有空值,同时相应的数据库行具有 ''。
希望我说的有道理。特别是如果您正在考虑针对此类场景进行动态插入(以避免必须为非空列设置所有属性并依赖默认约束),请三思。
关于java - 为什么 Hibernate 默认不设置 @DynamicInsert,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21721818/