1

我正在使用 Cayenne 将记录添加到 MySQL 数据库中,并且我看到了一些奇怪的行为。

当我运行我的应用程序时,我会创建一个 DataContext,执行一系列添加操作,然后关闭应用程序。这很有效,因为我使用整数作为主键,并且当我向数据库添加记录时,键会自动递增。出于某种原因,它从第一个记录的 200 开始,然后到第二个记录的 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 回答