我正在使用Cayenne將記錄添加到MySQL數據庫,並且我看到一些奇怪的行爲。Cayenne「重置」主鍵值?
當我運行我的應用程序時,我創建了一個DataContext,執行一系列添加,然後關閉應用程序。這很好,因爲我爲主鍵使用了一個整數,當我向數據庫添加記錄時,鍵會自動增加。由於某種原因,第一條記錄的起始位置爲200,第二條記錄的起始位置爲201,等等。
但是,如果我停止了應用程序,然後再次運行,則主鍵從200開始!這當然會導致拋出一個異常,因爲新記錄最終會有一個重複的主鍵。這看起來像在我啓動我的應用程序後使用DataContext的newObject()創建一個新對象時,Cayenne並沒有「記住」在以前運行應用程序時主鍵增加了多少。
有誰知道是什麼導致主鍵值的重置,以及(更重要的是)如何阻止它發生?或者我在當前版本的Cayenne中發現了一個錯誤?我正在使用版本3.0.2。
有人請指教...
是的,我已經檢查了AUTO_PK_SUPPORT表,並且讀取了建模器生成的SQL。顯然,當你創建模式時,出於某種原因,Cayenne Modeler將「下一個」主鍵設置爲200(爲什麼我不知道!)。即使我將密鑰生成設置爲「從數據庫」(我從這裏閱讀其他條目中計算出來),似乎也這樣做了。我一直無法找到阻止Modeler執行此操作的方法。我可能不得不用手擰鑰匙支撐臺 - 我真的不想這麼做...... – 2013-05-10 10:01:37
我其實很愚蠢。當您使用Modeler創建數據庫模式以確保「Create PK Support」複選框未被選中時,它會有所幫助。問題解決了。 – 2013-05-10 12:18:51
很高興你知道了。順便說一句「200」的起始價值有點像卡宴早期的遺產,因爲我們認爲保留一小部分「保留」用於Cayenne以外的保留小組是一個好主意。這完全是任意的(可能是10或1000等)。它不應該影響任何東西。我想我們可以把它放到1以減少混淆。 – 2013-05-10 17:43:39