优化Hibernate实体保存?

时间:2009-02-04 03:22:54

标签: java hibernate transactions

有没有办法减少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,我得到了验证错误。

1 个答案:

答案 0 :(得分:3)

如果添加注释:

@org.hibernate.annotations.Entity(dynamicUpdate = true)

到实体顶部,只有已更改的字段才会被发送到数据库。