2011-06-21 33 views
1

我有我從1.0.3遷移到1.3.7Grails的版本列

這是我的理解一個Grails應用程序所使用的版本號將在對行更新零和經銷商的增量開始表。我所有的遺留數據顯示,每行的版本單元爲空,但輸入的新行的版本號爲0.

Grails的版本1.0.3是否不支持此概念?我是否應該將所有適當的表的所有這些行更新爲用戶0而不是null?什麼影響?謝謝。

回答

6

Grails一直支持版本列來實現Hibernate的樂觀鎖定。當你更新一個實例時,Hibernate會生成SQL來比較當前版本和以前的版本,並且如果它們不同,將會拋出異常。由於SQL null永遠不會等於任何東西,所以任何嘗試更新這些行都會觸發異常。

修復很簡單 - 只需運行查詢將空值設置爲0,如update table_name set version=0 where version is null

完成此操作後,您應該將這些列更改爲非空以避免將來使用空值。

+0

太好了,謝謝你提供的信息。任何關於這個列如何可能具有空值的想法?該項目已啓動並運行在以前的Grails版本上,並且不會引發異常。我可以證實你所說的 - 現在當它們被更新時它們被拋出,但我不能說明它們之前沒有被拋出的原因。再次感謝你的幫助。 – skaz

+0

我想不出任何會這樣做,除非有人手動添加列可以爲空 –