gpt4 book ai didi

java - 优化 Hibernate 实体保存?

转载 作者:行者123 更新时间:2023-11-30 01:40:25 25 4
gpt4 key购买 nike

有没有办法减少 SQL 插入和 SQL 更新中不必要的/空字段?

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

如果我坚持使用单个实体类,那么对于第二次更新,我执行的步骤如下:

1)加载id标识的实体

2) 保存实体,这会生成似乎正在发送所有字段的 sql。

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

大家有更好的建议吗?

肯特

编辑:

我真正想要实现的是以下效果:插入 t(id,字段1,字段2) (?,?,?)更新 t 设置字段3=?字段4=? id=哪里?

我现在用dynamicUpdate=true能达到的最好效果是插入 t(id,字段1,字段2) (?,?,?)从 t 中选择字段 1、字段 2、字段 3、字段 4,其中 id=?更新 t 设置字段3=?字段4=? id=哪里?

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

附加说明。实体类使用 Hibernate 验证进行注释。我目前正在尝试实现上面想要的效果,所以我把它们注释掉了。但是当我重新打开它们时,由于 @NotNull 和 @NotEmpty,我收到验证错误。

最佳答案

如果添加注释:

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

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

关于java - 优化 Hibernate 实体保存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/509950/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com