我正在使用Cayenne将记录添加到MySQL数据库中,我看到了一些奇怪的行为。
当我运行我的应用程序时,我创建一个DataContext,执行一系列添加,然后关闭应用程序。这很好用,因为我使用一个整数作为主键,当我向数据库添加一个记录时,该键自动递增。由于某种原因,它从第一个记录的200开始,然后到第二个记录的201,等等。
但是,如果我停止应用程序,然后再次运行它,主键将再次从200开始!当然,这会导致抛出异常,因为新记录最终会出现重复的主键。看起来当我在启动应用程序后使用DataContext的newObject()创建一个新对象时,Cayenne并不“记住”当应用程序先前运行时主键增加了多少。
有谁知道导致主键值重置的原因,以及(更重要的是)如何阻止它发生?或者我在当前版本的Cayenne中发现了一个错误?我使用的是3.0.2版。
有人请指教......
答案 0 :(得分:2)
给定表的最后使用的PK存储在名为AUTO_PK_SUPPORT的特殊表中。请在重新启动应用之间检查此表的内容。还要检查应用程序Cayenne日志,以便读取和写入AUTO_PK_SUPPORT。这应该可以让您了解正在发生的事情。
除此之外,您可以切换到自动增量PK(请参阅“数据库提供的主键”部分here)。 MySQL支持自动递增的PK列,如果您可以选择更改架构,则此IMO是所有可用的最干净的PK生成策略。 (并且它不需要AUTO_PK_SUPPORT)。