2013-01-02 30 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