2009-02-04 67 views
1

有没有办法减少SQL插入和SQL更新中的不必要/空字段?优化Hibernate实体保存?

例如,我有一个hibernate实体类映射到一个有10列的表。数据填充实际上分两个阶段完成。当用户提交请求时,我会将请求信息插入带有hibernate实体的表中,但只填充7个字段。经过一些处理(例如等待其他用户交互)后,我将填充剩余的3个字段(使用前一个插入的ID)。

如果我坚持单个实体类,所述第二更新,我做的步骤如下:

1)装载由id标识的实体

2)保存实体,其产生SQL似乎在发送所有的字段。

或者,我创建了两个实体类,并指向同一个表并单独保存它们。

有没有人有更好的建议?

肯特

编辑:

我真正想实现的东西以下效果:(?,?,?) 插入T(ID,FIELD1,FIELD2) 更新t将字段3 =?字段4 =?其中id =?

我现在dynamicUpdate =真 插入T(ID,FIELD1,FIELD2)(?,?,?) 选择场,场2,字段3,字段4在t可以达到最佳的其中id =? update t set field3 =?字段4 =?其中id =?

有没有办法消除这个select语句?插入后,原始的持久对象不会存储在内存中的任何位置。

附加说明。实体类用Hibernate验证进行注释。我目前正在尝试达到上述预期效果,所以我评论了他们。但是当我将它们重新打开时,由于@NotNull和@NotEmpty,我得到验证错误。

+0

dynamicUpdate = true完美。 – sqlnewbie 2011-04-01 06:43:01

回答

3

如果您添加注释:

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

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

+0

我试了一下,它的工作原理。但是有没有办法消除我必须首先加载实体的步骤?我想消除额外的'选择'语句到数据库(假设该实体没有在会话中缓存) – 2009-02-04 10:49:23