我是休眠的新手,当我添加一个元素并取消它时,我看到数据保存在数据库中。在我的代码中,我没有调用 save 方法来保存它。
3 回答
如果您正在修改已与 Hibernate 会话关联的对象,您的所有修改都将被保存。检查手册。
例如,如果您执行以下操作:
- 从数据库加载对象
- 通过添加或删除值来修改对象
- 即使您不使用该
save()
方法,修改也会被保存。
一旦你从数据库加载数据,它就会变成持久的,并且对它所做的任何更改都将被更新,如果它在会话关闭之前被更新的话。如果您不希望数据库中的数据在加载后使用所做的更改进行更新,请仅在关闭会话后进行更改。然后,如果您想再次持久化数据,请再打开一个会话并调用 save() 或 persist()。
编辑:1)确保缓存被禁用,以确保不同会话之间没有缓存。
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
2) 执行以下步骤:
i)开始会话->开始事务->从两个表中获取数据->关闭事务->关闭会话。
ii)创建第三个表的对象-> 用它做任何你想做的事情,比如从前两个表中添加数据。
iii) 开始新会话 --> 开始新事务 --> 使用 session.save() 保存第三个表的对象 --> 关闭事务 --> 关闭会话。
步骤 (i) 完成后,table1 和 table2 中的对象不再“持久”,而是“分离”。如果您在步骤 (iii) 中不执行 session.save(),则 table3 的对象将不会被保存,因为它不再处理持久对象。
这是我对持久和分离对象的理解。如果不起作用,请回复。我会将其编码并找到解决方案。
还有一个建议,请考虑使用 session.persist() 而不是 session.save()。如果您想了解它们的区别,请点击以下链接:Hibernate 中persist() 与 save() 的优势是什么?
祝你好运!
似乎您的休眠配置中有AutoFlash
和/或AutoCommit
参数On
。尝试禁用它们。