java - 为什么 Hibernate 默认不设置 @DynamicInsert

标签 java sql hibernate jpa orm

谁能向我解释为什么 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/

相关文章:

java - 在 Java 中创建控制台

java - 如何将RabbitMQ数据返回给客户端(网站用户)

hibernate - GORM 映射声明::长或不长

spring - 在更新请求中查找更新的字段

java - 具有非阻塞套接字的多线程

java - 如何以编程方式使用 Maven 下载 jar

c# - Lambda 表达式 Sql 到 C# 日期时间

sql - 使用 SQL 从子组推断整体组

mysql - 使用 change 更改表列

java - 如何在 Controller 中制作删除按钮