有没有办法减少SQL插入和SQL更新中不必要/空的字段?
例如,我有一个hibernate实体类映射到一个有10列的表。填充数据实际上分两个阶段完成。当用户提交请求时,我将使用hibernate实体将请求信息插入到表中,但仅填充7个字段。经过一些处理(例如等待其他用户交互)后,我将填充剩余的3个字段(使用前一个插入中给出的id)。
如果我坚持使用单个实体类,对于第二次更新,我所做的步骤如下:
1)加载由id
标识的实体2)保存实体,该实体生成似乎正在发送所有字段的sql。
或者,我创建了两个实体类,并指向同一个表并单独保存它们。
有没有人有更好的建议?
肯特
编辑:
我真正想要实现的是以下效果: insert t(id,field1,field2)(?,?,?) update t set field3 =?字段4 =?其中id =?
我现在可以通过dynamicUpdate = true实现的最佳效果是 insert t(id,field1,field2)(?,?,?) 从t中选择field1,field2,field3,field4,其中id =? update t set field3 =?字段4 =?其中id =?
有没有办法消除那个选择语句?插入后,原始持久化对象不会存储在内存中的任何位置。
另外一张纸条。实体类使用Hibernate验证进行注释。我目前正在尝试达到上述预期的效果,所以我对它们进行了评论。但是当我重新打开它时,由于@NotNull和@NotEmpty,我得到了验证错误。
答案 0 :(得分:3)
如果添加注释:
@org.hibernate.annotations.Entity(dynamicUpdate = true)
到实体顶部,只有已更改的字段才会被发送到数据库。