2012-03-15 51 views
0

休眠更新表相同的值或相同的值,而不session.save休眠更新表session.update有沒有session.save或session.update

我們怎樣才能加載對象(從數據庫中的行),並將其保存沒有改變任何字段值。

我們需要hibernate爲它的行發出一個UPDATE查詢,並加載相同的值。 我們在Hibernate和JDBC之間有一箇中間件,它在hibernate正在執行UPDATE時改變數據。

我們嘗試過session.replicate,但它刪除了該對象的所有集合。 即

class User{ 
     Set<Order> orders; //inversely mapped 

    } 
    class Order{ 
     User user; 
    } 

while doing session.replicate(user) it is issueing a following SQL 

update ORDER set user=null where id=? 

這意味着我們正在失去我們所有的關係。

session.save或session.update不會工作,因爲我們不會在傳遞到休眠之前更改值。

是否有任何其他方式迫使hibernate考慮所有字段都被修改,並且它應該更新數據庫?

+1

如果你不想改變數值爲什麼火了更新?或者你想讓會話對象和數據庫對象同步? – ManuPK 2012-03-15 02:44:40

+0

我們在Hibernate和JDBC之間有一箇中間件,它在hibernate正在執行UPDATE和SELECT時改變(加密和解密)數據。我們需要此解決方案來處理現有的未加密數據。我們先加載然後再保存,所以在保存的時候我們會加密它。但是,所有這些都隱藏到休眠狀態,所以它不知道值已更改。 – Rajesh 2012-03-15 03:03:24

回答

0

你可以實現preflushListener來設置所有的實體改變,併爲此類設置dynamicupdate="false"

我想你可以看看,延長之一:

DefaultFlushEventListener.java 
DefaultFlushEntityEventListener.java 
+0

我需要做session.replicate嗎?或session.update?或其他任何事情來使上述聽衆工作? – Rajesh 2012-03-16 03:34:19

+0

只有當實體尚未附加到會話,而不是當您使用同一會話加載對象時的情況 – Firo 2012-03-16 09:24:04

+0

對不起,聽起來很愚蠢,我沒有在文檔中找到任何preflushlistener。 – Rajesh 2012-03-16 15:24:45