Heim  >  Artikel  >  Datenbank  >  Wie behebe ich den Fehler „Unbekannte Spalte ‚Sequenzname' in ‚Where-Klausel'' bei Verwendung von @GeneratedValue GenerationType.TABLE mit einer polymorphen abstrakten Superklasse in MySQL?

Wie behebe ich den Fehler „Unbekannte Spalte ‚Sequenzname' in ‚Where-Klausel'' bei Verwendung von @GeneratedValue GenerationType.TABLE mit einer polymorphen abstrakten Superklasse in MySQL?

Barbara Streisand
Barbara StreisandOriginal
2024-11-11 18:36:02903Durchsuche

How to Resolve

@GeneratedValue Polymorphic Abstract Superclass over MySQL

In einer Spring MVC-Anwendung, die Hibernate und MySQL verwendet, wurde beobachtet, dass versucht wurde, Unterklassen einer abstrakten Superklasse, BaseEntity, beizubehalten stößt auf den Fehler „Tabelle ‚docbd.hibernate_sequences‘ existiert nicht“. Dieser Fehler entsteht durch die Verwendung von GenerationType.TABLE für @GeneratedValue und die fehlende Sequenzunterstützung in MySQL.

Da die Verwendung von GenerationType.IDENTITY aufgrund der abstrakten Oberklasse, die Entitäts-IDs verwaltet, und GenerationType.SEQUENCE nicht sinnvoll ist nicht unterstützt wird, stellt sich die Frage, wie dieses Problem gelöst werden kann. Die bereitgestellten Codeausschnitte veranschaulichen die abstrakte Oberklasse (BaseEntity), eine Beispielunterklasse (CCD), Domain Specific Language (DDL) und JPQL-Code innerhalb eines Data Access Object (DAO).

Die verwendete Vererbungsstrategie ist InheritanceType .TABLE_PER_CLASS gibt separate Tabellen für jede Unterklasse an. Angesichts der Unfähigkeit von MySQL, Sequenzen zu verwenden, führt die Alternative zur Verwendung von GenerationType.TABLE unweigerlich zum Fehlen einer Tabelle „hibernate_sequences“.

Der Poster behauptet, dass die Verwendung von @MappedSuperClass keine praktikable Option sei, und verweist auf die Notwendigkeit austauschbarer ManyToOne-Beziehungen . AccessLog enthält beispielsweise eine Actor_Entity und eine Target_Entity, die beide von BaseEntity erben. In diesem Szenario würde die Verwendung von @MappedSuperClass zu einem Fehler führen, der darauf hinweist, dass AccessLog BaseEntity nicht finden kann.

Um das Problem zu beheben, wurde wie vorgeschlagen eine Tabelle „hibernate_sequences“ erstellt. Es ist jedoch ein neuer Fehler aufgetreten: „Unbekannte Spalte ‚Sequence_name‘ in ‚Where-Klausel‘.“ Dieser Fehler verweist auf die von Hibernate initiierte SQL-Abfrage: „select sequence_next_hi_value from hibernate_sequences where sequence_name = ‚BaseEntity‘ for update.“

Um diesen speziellen Fehler zu beheben, benötigt der Poster Hilfe beim Auflösen der fehlenden Spalte „sequence_name“ in den hibernate_sequences Tabelle.

Das obige ist der detaillierte Inhalt vonWie behebe ich den Fehler „Unbekannte Spalte ‚Sequenzname' in ‚Where-Klausel'' bei Verwendung von @GeneratedValue GenerationType.TABLE mit einer polymorphen abstrakten Superklasse in MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn