@GeneratedValue MySQL 上的多態抽象超類別
在使用Hibernate 和MySQL 的Spring MVC 應用程式中,我們發現嘗試持久化抽象化抽象BaseEntity 的超類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_sequence 中缺少表的「列」欄位。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3