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