gpt4 book ai didi

java - 分离的实体怎么可能成为 hibernate 中的持久对象?

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

我读到了有关“ transient ”、“持久”和“分离”的内容。看起来大部分内容都很容易理解。我无法克服的是,当我们使用 session.close() 时,已经在一级缓存中的实体对象被删除或清除,在我看来,没有机会带来或清除将实体或对象恢复到持久状态。但后来我从不同的来源看到或读到的是,分离的实体仍然可以稍后重新附加到新 session 。 session 关闭后一级缓存被清除怎么可能?

最佳答案

我想向您保证,这并不那么复杂。简单地说...

  • 我们可以在一个 session 中加载一个实体( session 实例) - 并关闭这样的 session ,同时保持对已加载实体的引用。一旦 session 关闭,该实体就会分离
  • 我们可以打开新的 session (不同的 session 实例) - 并重新附加该实体。然后我们就能够保留同时所做的更改。

就是这样。来自文档的更多详细信息:

11.6. Modifying detached objects

Many applications need to retrieve an object in one transaction, send it to the UI layer for manipulation, then save the changes in a new transaction. Applications that use this kind of approach in a high-concurrency environment usually use versioned data to ensure isolation for the "long" unit of work.

...

Use update() if you are certain that the session does not contain an already persistent instance with the same identifier. Use merge() if you want to merge your modifications at any time without consideration of the state of the session.

所以,这里的重点是......加载 session 实体不是 transient 的。它已经被坚持了。一旦 session 关闭,它就会分离。但稍后可以重新连接到另一个 session

关于java - 分离的实体怎么可能成为 hibernate 中的持久对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30787423/

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