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