gpt4 book ai didi

java - 将持久对象设置为 NULL 是否会在 Hibernate 中删除它

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

考虑这个例子:(User 是一个具有两个字段的类:生成的 id 和用户名)

User user = new User();
user.setUserName("username");

SessionFactory sessionfactory = new Configuration().configure().buildSessionFactory();
Session session = sessionfactory.openSession();

session.beginTransaction();
session.save(user);
user = null; // Does this deletes the object?
session.getTransaction().commit();

session.close();

因为 user 是持久对象,为什么将其设置为 null 不会从数据库中删除该对象?

最佳答案

不,事实并非如此。将局部变量设置为 null 意味着该方法之外没有任何意义。 Hibernate 无法知道您已经使局部变量无效(即使它是一个不受 hibernate 管理的字段,hibernate 仍然无法检测到更改)。

原因是变量和字段只是对对象的引用,而不是对象本身。因此,当您将引用设为 null 时,并不意味着该对象不再存在。在这种情况下,它仍然存在于 hibernate session 中。 (正如 JB Nizet 所指出的,如果拥有该字段的对象由 hibernate 管理,hibernate 可以检测到更改并删除该对象,但这仅适用于 hibernate 管理的对象:附加实体)

您需要调用session.delete(user)

关于java - 将持久对象设置为 NULL 是否会在 Hibernate 中删除它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8026313/

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