gpt4 book ai didi

java - Hibernate:我需要 flush() 吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:04:20 26 4
gpt4 key购买 nike

我有一个双向的一对多关系。我正在尝试像在本文档中那样坚持下去:

http://docs.jboss.org/hibernate/core/3.3/reference/en/html/example-parentchild.html#example-parentchild-bidir

Parent p = (Parent) session.load(Parent.class, pid);
Child c = new Child();
c.setParent(p);
p.getChildren().add(c);
session.save(c);
session.flush();

那里需要 flush() 吗?它到底是做什么的?我知道它的作用,但我发现它花费了我 100 毫秒,我真的很想尽可能避免它。

session.load() 甚至 session.refresh() 被调用并且我没有刷新时,它会包含新的 Child 在集合中?

最佳答案

调用 flush 会将 session 状态与数据库同步。此时您不需要显式刷新。 Hibernate 足够聪明,知道何时需要使用 session 更新数据库,例如在执行查询之前。

这 100 毫秒的成本将在某个时候产生,因为这是在您的应用程序中使用数据库的必然结果。 Hibernate 能够延迟此操作并批量处理数据库更改,以最大限度地减少数据库往返。

Hibernate 将在事务结束时刷新 session (默认情况下),因此如果您在同一个 session 中调用加载,您将从 session 中获取相同的对象。如果您在新 session 中调用加载,Hibernate 将刷新更改并且您的 child 将在集合中。

如果您要在执行刷新之前清除 session 或从 session 中逐出您的对象,您会发现您的 child 不在场。

This文档中的章节应该有所帮助。

关于java - Hibernate:我需要 flush() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7387797/

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