gpt4 book ai didi

java - 为什么使用 session.get 加载对象不会在 session 结束时保留对象修改?

转载 作者:行者123 更新时间:2023-11-30 09:45:06 26 4
gpt4 key购买 nike

也许我误解了 hibernate 中 get 和 merge 的语义,但是如果我这样做(在 Spring 方法 Controller 中,因此使用服务和 dao 层):

ClassMy a = service.get(234, ClassMy.class) (this loads the object using session.get)

a.setPropertyX("test");

这不会导致自动更新。相反,如果我的内存中已经有了“a”,我会这样做:

a = (ClassMy) service.merge(a);
a.setPropertyX("test");

这会导致更新。

是否必须在使用 get 加载对象后合并对象?听起来很奇怪...

最佳答案

你有问题。

第一个片段应该有效,前提是它在与 service.get 调用相同的事务中执行(即事务应该由包含此片段的方法启动,而不是由 service.get 方法)。

在第二个片段中,如果它在事务中运行,那么它应该可以工作:它从 session 中加载实体,然后将分离的 a 的状态复制到附加实体,然后修改附加实体的属性。如果它不在事务中运行(即如果它是 service.merge 启动事务),合并将起作用,但属性的更改将在分离的实体上完成,属性的新值将获胜' 坚持下去。

关于java - 为什么使用 session.get 加载对象不会在 session 结束时保留对象修改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7594786/

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