gpt4 book ai didi

java - Hibernate Session.flush()效率问题

转载 作者:搜寻专家 更新时间:2023-10-30 19:46:21 24 4
gpt4 key购买 nike

如果有人已经回答了这个具体问题,但我还没有找到我的问题的答案,那么提前道歉。

我正在开发一个使用 DAO、Hibernate 和 POJO 以及所有用于通信和写入数据库的东西的应用程序(不,我不能给出工作代码,所以我很抱歉)。如果我在调用 Session.flush() 时没有大量数据要检查,这对应用程序来说效果很好。也就是说,有一个页面,用户可以在其中向产品添加任意数量的项目,并且有一种特殊情况,其中有大约 25 个项目。每个项目大约有 8 个字段,全部存储在数据库中。当我调用刷新时,它确实将所有内容保存到数据库中,但它需要永远才能完成。我调用的三行是:

merge(myObject);
Session.flush();
Session.refresh(myObject);

我已经尝试了很多不同的组合来解决这个问题和很多不同的解决方案,所以回来说“不要使用 flus()”并没有多大帮助,因为 saveOrUpdate() 和其他 hibernate session 似乎不起作用。我能想到的唯一解决方案是废弃整个项目(我们得到的代码是继承的,至少可以说写得不好)或者告诉用户社区接受它。

根据我对 Hibernate API 的理解,如果您想将数据写入数据库,它会对每个项目运行检查,如果存在差异,它会创建一个更新查询队列,然后运行查询。似乎每次都在更新此数据,因为即使其他值未更改,我数据库中的“DATE_CREATED”列也不同。

我想知道是否有另一种方法可以防止如此大量的数据提交,或者有一种方法可以将特定列从“检查” hibernate 中排除,这样我就不必提交所有 25 个项目,如果我只更改为 1?

提前致谢。

迈克

最佳答案

嗯,除非你使用 StatelessSession,否则你真的无法避免 hibernate 中的脏检查.当然,你会失去很多功能(延迟加载等),但这个决定取决于你。

另一种选择:我肯定会尝试在您的实体中使用 dynamic-update=true。喜欢:

@Entity(dynamicUpdate = true)
class MyClass

使用它,Hibernate 将只更新修改的列。在列数很少的小表中,它不是那么有效,但在您的情况下,它可能有助于加快整个过程,因为您无法避免使用常规 Hibernate Session 进行脏检查。更新几列而不是整个对象总是更好,对吧? This post详细讨论动态更新属性。

关于java - Hibernate Session.flush()效率问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12111350/

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