我有一個名稱和一個name_count表。因此,當我插入新記錄時,我首先檢查該名稱的最大name_count是多少。然後我插入最大值爲+ 1的記錄。很好的作品...除了使用mysql 5.1和hibernate 3.5之外,默認情況下,讀取並不尊重事務邊界。其中2個相同名稱的插入可能會同時發生,並以相同的name_count結束,這完全是螺絲釘我的應用程序!如何鎖定事務以讀取行然後插入Hibernate?
不幸的是,有一些具體的情況,其中上述實際上是相當普遍的。那麼我該怎麼做?我想我可以做一個悲觀的鎖,我讀的任何行都被鎖定,以便進一步閱讀,直到我提交或回滾我的事務。或者我可以使用版本列進行樂觀鎖定,自動保持嘗試,直到沒有衝突?
對於我的情況,最好的方法是什麼?我如何在Hibernate 3.5和mysql 5.1中指定它?上表非常龐大,經常訪問。
我想幾個問題......我如何在休眠中使用序列?我真的可以爲我的情況使用序列嗎?可能會有2億個獨特的名字,我需要一個序列。關於鎖,我不能鎖定整個表,這是一個經常訪問的龐大表......不能在這種情況下使用hibernate/mysql進行基於行的鎖定嗎? – 2010-05-25 08:40:19
你鏈接到的文檔只是自動增加ID ..這將工作,但我必須在我的情況下創建2億張表,不知道這是可行或可取的。 我把我的情況解釋爲調用max(),但實際上我並沒有這麼做,因爲max()對於大表而言速度太慢。相反,我讀取具有相同名稱和最大數量的行(按name_count限制1排序)。所以我想要鎖定那一行。 – 2010-05-25 17:33:29