2013-07-11 57 views
0

我有一個Hibernate APP,我們試圖用ZK實現Open Session in View Pattern我有一個問題Hibernate爲每個線程創建一個會話並關閉它,但是在一個會話中我們有幾個操作[criteria和save或update]方法,我們開始使用更新方法,我們很快收到如果以下臭名昭著視圖合併中的Java Hibernate會話丟失更改?

NONUNIQUEOBJECTEXCEPTION 

我們已經改變update()merge()我的問題。

如果我有一個Student類,並嘗試使用update[making sure is not in session avoid the exception]更新學生,但後來在另一種方法要求學生再次不同於以前update這個時候,我們應該mergingmerge()方法被稱爲更新。我想知道什麼時候[flush][commit]方法被稱爲第一個學生的變化是損失?這兩個學生的變化都可以嗎?怎麼了??

恐怕第一個student的變化就是虧損!在這種情況下我能做些什麼?

非常感謝。

回答

0

你應該看看鎖定算法。有兩種流行的:樂觀和悲觀。對於Web應用程序,樂觀鎖定通常效果更好。長話短說每個版本的實體對象都有一個版本標籤(通常是bigint或字符串db列)。當某人搶先更新並且版本過時時,hibernate會拋出樂觀鎖定異常,在這種情況下,您可以捕獲並詢問用戶該做什麼(或採取其他適當的措施)

+0

感謝提示gerrytan what pre - 是否意味着? – javiut

+0

假設2個人正在獲取相同版本的實體對象,但是一個人先保存他/她的變化,然後再將另一個人的變化保存在另一個人之前,而不是此人已將其他變更先佔。這是鎖定技術有用的地方 – gerrytan