2013-01-02 26 views
0

我是新来的休眠,而我添加一个元素并取消它,我看到数据被保存在分贝。我的代码中没有任何地方叫save方法来保存它。数据获取保存在分贝没有保存(休眠)

+0

显示您的代码? – Subin

+0

我有多对多的关系。 我正在加载对象从数据库使用加载&试图修改对象 – Krishna

回答

0

在您的休眠配置中,您似乎有AutoFlash和/或AutoCommit参数On。尝试禁用它们。

+0

没有我不使用这些参数在.xml文件 – Krishna

+0

如果你正在创建你的Hibernate会话春天,你应该添加属性如下:' false'也可以打开一个事务(这是最好的方法),然后调用'rollback'来避免将数据保存到数据库中 – Hazhir

1

如果您正在修改已与Hibernate会话关联的对象,则所有修改都将被保存。检查manual

例如,如果你做这样的事情:即使你不使用

  1. 加载对象从DB
  2. 通过添加或移除值
  3. 的修改,修改的对象将被保存方法save()
+0

yes you是正确的我正在从数据库加载对象和通过添加或删除值修改对象 – Krishna

+0

是的,我明白持久对象将被自动保存,但如何保存它在调用save()还有很多-many relationship b/w tables。 – Krishna

0

从db中加载数据后,它将变为持久性的,并且如果在会话关闭之前更新它,则对其所做的任何更改都将更新。如果您不希望数据库中的数据使用您在加载后所做的更改进行更新,请仅在关闭会话后进行更改。然后,如果你想再次保存数据,再打开一个会话并调用save()或persist()。

编辑: 1)确保禁用缓存以确保在不同会话之间不存在缓存。

<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> 

2)按照以下步骤:

我)开始会话 - >开始交易 - >两个表中获取数据 - >关闭交易 - >关闭会话。 ii)创建第三个表的对象 - >做任何你想要的事情,比如从前两个表中添加数据。

iii)开始新的会话 - >开始新的事务 - >使用session.save() - >关闭事务 - >关闭会话保存第三个表的对象。

完成步骤(i)后,table1和table2中的对象不再是“持久性”,而是“分离”。如果在步骤(iii)中没有执行session.save(),则table3的对象将不会被保存,因为它不再处理持久对象。

这是从我对持久性和分离对象的理解。如果不起作用,请回复。我会将其编码并找到解决方案。

还有一个建议,请考虑使用session.persist()而不是session.save()。 如果你想了解他们的区别,这是链接:What's the advantage of persist() vs save() in Hibernate?

祝你好运!

+0

我想要做的是从两个表中获取数据并将其放入第三个表格有这两个表格的参考。不调用保存数据保存在第三个表中。 – Krishna

+0

检查编辑 –

+0

感谢您的回复。但我无法禁用缓存。
请给我建议另一个解决方案 – Krishna