一尘不染

为什么默认情况下Hibernate设置动态insert = false

hibernate

谁能向我解释为什么Hibernate 默认将 Dynamic insert = false 设置为10,这是什么原因?


阅读 263

收藏
2020-06-20

共1个答案

一尘不染

@ jb-nizet说了什么。

另外,dynamic-insert="true"在我的书中是个坏主意。

从生成的SQL中跳过空字段,很快您将发现自己处于声明列的情况,not null default这实际上导致持久数据与hibernate知道的实体数据不同。这会造成挫败感,并可能使您诉诸昂贵的session.refresh()电话。

例如假设列

MESSAGE varchar(64) not null default ''

并且您为映射到此列的属性保存了一个具有空值的实体。

使用dynamic-insert,您将得到一个实体,该实体的内存中属性消息的值为空,而相应的数据库行则带有’‘。

我希望我有道理。特别是如果您正在考虑针对这种情况进行动态插入(以摆脱不必为非null列设置所有属性并依赖默认约束的情况),请再考虑一下。

2020-06-20