MySQL 上的 @GenerateValue 多态抽象超类
当使用 Hibernate 和 MySQL 在 Spring MVC 应用程序中使用抽象超类和 @GenerateValue 时,它是必须考虑数据库的具体要求和限制。当 GenerationType.TABLE 与 MySQL 一起使用时,经常出现“Table 'docbd.hibernate_sequences'不存在”的错误,MySQL 本身不支持序列。
问题概述
出现此问题的原因是 GenerationType.TABLE 需要一个名为“hibernate_sequences”的表来存储序列值。由于 MySQL 没有该表,Hibernate 尝试创建它,从而导致错误。此外,在抽象超类中管理 ID 时,使用 GenerationType.IDENTITY 是不可行的。
解决方案
尽管 GenerationType.TABLE 和 GenerationType.IDENTITY 有限制,但有一个解决这两个问题的解决方案。不依赖序列表或 AUTO_INCRMENT,而是在保存实体之前手动检索下一个 ID 并设置它来解决问题。此方法涉及以下步骤:
此方法有效地生成不依赖序列或 AUTO_INCRMENT 的新 ID。它提供了更大的灵活性,并确保解决 MySQL 中不存在序列的问题。
以上是如何使用 Hibernate 和 MySQL 为 Spring MVC 应用程序中的抽象超类生成 ID?的详细内容。更多信息请关注PHP中文网其他相关文章!