1

Cayenne を使用して MySQL データベースにレコードを追加していますが、奇妙な動作が見られます。

アプリケーションを実行するときは、DataContext を作成し、一連の追加を実行してから、アプリケーションを閉じます。主キーに整数を使用しているため、これはうまく機能します。データベースにレコードを追加すると、キーは自動的にインクリメントされます。何らかの理由で、最初のレコードでは 200 から始まり、2 番目のレコードでは 201 に移動します。

ただし、アプリケーションを停止してから再度実行すると、主キーは再び 200 から始まります。もちろん、これにより例外がスローされます。これは、新しいレコードが重複した主キーを持つことになるためです。アプリケーションの起動後に DataContext の newObject() を使用して新しいオブジェクトを作成すると、Cayenne は、アプリケーションが以前に実行されたときに主キーがどれだけインクリメントされたかを「記憶」していないようです。

主キー値のこのリセットの原因と、(さらに重要なことに)それを停止する方法を知っている人はいますか? または、現在のバージョンの Cayenne でバグを見つけましたか? バージョン 3.0.2 を使用しています。

誰かアドバイスください...

4

1 に答える 1

2

特定のテーブルで最後に使用された PK は、AUTO_PK_SUPPORT という特別なテーブルに保存されます。アプリの再起動の間に、このテーブルの内容を確認してください。また、アプリケーションの Cayenne ログで AUTO_PK_SUPPORT への読み取りと書き込みを確認してください。これにより、何が起こっているのかがわかります。

それとは別に、自動インクリメント PK に切り替えることもできます (ここの「データベースによって提供される主キー」セクションを参照してください)。MySQL は自動インクリメント PK 列をサポートしており、スキーマを変更するオプションがある場合、この IMO は利用可能なすべての中で最もクリーンな PK 生成戦略です。(そして、AUTO_PK_SUPPORT は必要ありません)。

于 2013-05-09T19:20:27.173 に答える