„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > 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?

Veröffentlicht am 17.11.2024
Durchsuche:612

How to Resolve

@GeneratedValue Polymorphic Abstract Superclass over MySQL

In einer Spring MVC-Anwendung, die Hibernate und MySQL verwendet, wurde beobachtet, dass der Versuch, 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 möglich 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 hibernate_sequences-Tabelle.

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 ‚Sequenzname‘ 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 Unterstützung beim Auflösen der fehlenden Spalte „sequence_name“ in der Tabelle „hibernate_sequences“.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3