有人可以向我解释为什么Hibernate默认设置 Dynamic insert = false ,这是什么原因?
答案 0 :(得分:8)
动态插入和更新非常有用,原因有两个:
但是,动态插入/更新也有缺点:
所以,没有好方法或坏方法。它只取决于您的数据访问模式,以确定这两个中哪一个对给定实体有意义。
答案 1 :(得分:7)
因为插入实体时跳过空字段不会增加任何显着的性能改进。
相反,它可以降低性能,因为Hibernate必须创建一个特定的准备,而不是总是使用相同的预准备语句在表中插入行,并且能够在单个批处理中执行多个插入。要插入的每个实体的语句,这取决于空字段和非字段。
因此,更复杂,降低性能。
答案 2 :(得分:6)
@ jb-nizet说的是什么。
另外,dynamic-insert="true"
在我的书中是一个坏主意。
从生成的SQL中删除空字段,您很快就会发现自己会声明列not null default
,这实际上导致持久数据与hibernate知道的实体数据不同。这会导致沮丧,并可能使您诉诸昂贵的session.refresh()
电话。
例如假设列
MESSAGE varchar(64) not null default ''
并为映射到此列的属性保存具有空值的实体。
使用dynamic-insert,您将得到一个实体,该实体在内存中具有属性消息的空值,同时相应的数据库行具有''。
我希望我有道理。特别是如果您正在考虑针对这种情况进行动态插入(为了避免必须为非空列设置所有属性并依赖于默认约束),请再想一想。