在使用 Hibernate 和 MySQL 的 Spring MVC 应用程序中,我们发现尝试持久化抽象超类 BaseEntity 的子类,遇到“表'docbd.hibernate_sequences'不存在”错误。此错误是由于对 @GenerateValue 使用 GenerationType.TABLE 以及 MySQL 中缺乏序列支持而引起的。
由于管理实体 ID 的抽象超类和 GenerationType.SEQUENCE 导致使用 GenerationType.IDENTITY 不可行。不支持,这就引出了如何解决这个问题的问题。提供的代码片段说明了数据访问对象 (DAO) 中的抽象超类 (BaseEntity)、示例子类 (CCD)、域特定语言 (DDL) 和 JPQL 代码。
采用的继承策略是 InheritanceType .TABLE_PER_CLASS,表示每个子类的单独表。鉴于 MySQL 无法使用序列,使用 GenerationType.TABLE 的替代方案不可避免地会导致缺少 hibernate_sequences 表。
海报断言使用 @MappedSuperClass 不是一个可行的选择,理由是需要可互换的 ManyToOne 关系。例如,AccessLog 包含一个 actor_entity 和一个 target_entity,它们都继承自 BaseEntity。在这种情况下,使用 @MappedSuperClass 将导致错误,指示 AccessLog 无法找到 BaseEntity。
为了解决该问题,按照建议创建了 hibernate_sequences 表。然而,出现了一个新的错误:“Unknown column 'sequence_name' in 'where Clause'”。这个错误指向 Hibernate 发起的 SQL 查询:“select sequence_next_hi_value from hibernate_sequences whereequence_name = 'BaseEntity' for update。”
为了解决此特定错误,发布者需要帮助解决 hibernate_sequences 表中缺少的“sequence_name”列。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3