【发布时间】:2010-10-05 07:52:33
【问题描述】:
有没有办法减少 SQL 插入和 SQL 更新中不必要的/空字段?
例如,我有一个单一的休眠实体类映射到一个有 10 列的表。数据的填充实际上分两个阶段完成。当用户提交请求时,我会将请求信息插入到带有 hibernate 实体的表中,但只填充 7 个字段。经过一些处理(例如等待其他用户交互),我将填充剩余的 3 个字段(使用上一次插入给出的 id)。
如果我坚持使用单个实体类,对于第二次更新,我执行的步骤如下:
1) 加载id标识的实体
2) 保存实体,它会生成似乎将所有字段都发送过来的 sql。
另外,我创建了两个实体类,并指向同一个表并分别保存。
有人有更好的建议吗?
肯特
编辑:
我真正想要实现的是以下效果: 插入 t(id,field1,field2) (?,?,?) 更新 t 设置字段 3=?字段4=? id=?
我现在可以通过 dynamicUpdate=true 实现的最佳效果是 插入 t(id,field1,field2) (?,?,?) 从 t 中选择 field1,field2,field3,field4 其中 id=? 更新 t 设置字段 3=?字段4=? id=?
有没有办法消除该选择语句?插入后原始持久化对象不会存储在内存中的任何位置。
附加说明。实体类使用 Hibernate 验证进行注释。我目前正在尝试达到上述预期效果,所以我将它们注释掉。但是当我重新打开它们时,由于@NotNull 和@NotEmpty 出现验证错误。
【问题讨论】:
-
dynamicUpdate = true 完美运行。
标签: java hibernate transactions