gpt4 book ai didi

java - 在 hibernate 中禁用对多对一实体的更新

转载 作者:行者123 更新时间:2023-11-30 07:14:10 27 4
gpt4 key购买 nike

我有一个父子实体。 Child 有一个 Manytoone 注释来引用 Parent。用例是当我通过 findById 加载一个子项并使用 getter 获取父项时。那么如果我更新父级,我就可以保存父级。我不希望从 child 中取出的 parent 是可更新的。

  1. 如果我直接通过 id 找到它并更改属性并保存,我只想更新父级。

  2. 我知道当我对 child 执行 getParent() 时,hibernate 没有任何信息,它是从 child 那里获取的,但没有通过 ID 找到并更新给 parent 。

  3. 我在 Parent 的 ManytoOne 上尝试了 Immutable 注释,但它不会阻止触发更新。

有什么方法可以使从子节点中拉出的父节点不可更新?

如有任何疑问,请随时提出。

最佳答案

你遇到的问题,其实属于Hibernate的Session。它与Cascading 无关。因为 session 被设计为我们的工作单元

每当您通过 ID 1) 或 2) 通过引用访问对象时,该对象(从那一刻起)“缓存”在 Session 中。它是 Session 生命周期内所有处理共享的一个实例。

因此,一旦 Parent 被加载到 session 中,您无论如何都在修改它,随后 Session刷新 - 任何更改Parent 被持久化。

您可以调用session.evict(parent)明确地,以避免在 Flush 期间传播更改。

但在我看来有点奇怪,您在与 child 一起工作时(不小心......也许)改变了 parent 并且不愿意存储这些变化。换句话说,也许解决方案是改变方法。

关于java - 在 hibernate 中禁用对多对一实体的更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18603693/

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