如何解決在 MySQL 中將 @GeneeratedValue GenerationType.TABLE 與多態抽象超類別一起使用時出現「'where 子句'中的未知列 'sequence_name'」錯誤?

Barbara Streisand
發布: 2024-11-11 18:36:02
原創
889 人瀏覽過

How to Resolve

MySQL 上的@GenerateValue 多態抽象超類

在使用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.」

為了解決此特定錯誤,發布者需要協助解決此特定術語中的「quence hiber」。

以上是如何解決在 MySQL 中將 @GeneeratedValue GenerationType.TABLE 與多態抽象超類別一起使用時出現「'where 子句'中的未知列 'sequence_name'」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板