考虑这个例子:( 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();
Run Code Online (Sandbox Code Playgroud)
因为user是持久对象,为什么设置它null不会从DB中删除对象?
不,它没有.设置局部变量null意味着在方法之外没有任何内容.Hibernate不知道你已经使你的局部变量无效(即使它是一个不是由hibernate管理的字段,hibernate仍然不可能检测到变化).
原因是变量和字段只是对象的引用,而不是对象本身.因此,当您使引用为空时,这并不意味着该对象不再存在.在这种情况下,它仍然存在于hibernate会话中.(正如JB Nizet所指出的,如果拥有该字段的对象由hibernate管理,则hibernate可以检测到更改并删除该对象,但这仅适用于hibernate管理的对象:附加实体)
你需要打电话 session.delete(user)
| 归档时间: |
|
| 查看次数: |
489 次 |
| 最近记录: |