Heim  >  Artikel  >  Datenbank  >  Wie generiert man IDs für abstrakte Superklassen in Spring MVC-Anwendungen mit Hibernate und MySQL?

Wie generiert man IDs für abstrakte Superklassen in Spring MVC-Anwendungen mit Hibernate und MySQL?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-09 20:34:02262Durchsuche

How to Generate IDs for Abstract Superclasses in Spring MVC Applications using Hibernate and MySQL?

@GeneratedValue Polymorphic Abstract Superclass over MySQL

Bei der Arbeit mit abstrakten Superklassen und @GeneratedValue in einer Spring MVC-Anwendung unter Verwendung von Hibernate und MySQL ist dies der Fall Es ist wichtig, die spezifischen Anforderungen und Einschränkungen der Datenbank zu berücksichtigen. Der Fehler „Tabelle 'docbd.hibernate_sequences' existiert nicht“ tritt häufig auf, wenn GenerationType.TABLE mit MySQL verwendet wird, das Sequenzen nativ nicht unterstützt.

Problemübersicht

Das Problem tritt auf, weil GenerationType.TABLE eine Tabelle namens „hibernate_sequences“ benötigt, um die Sequenzwerte zu speichern. Da MySQL nicht über diese Tabelle verfügt, versucht Hibernate, sie zu erstellen, was zu dem Fehler führt. Darüber hinaus ist die Verwendung von GenerationType.IDENTITY bei der Verwaltung von IDs in einer abstrakten Oberklasse nicht möglich.

Lösung

Trotz Einschränkungen bei GenerationType.TABLE und GenerationType.IDENTITY gibt es eine Lösung, die beide Probleme angeht. Anstatt sich auf eine Sequenztabelle oder AUTO_INCREMENT zu verlassen, kann das Problem durch manuelles Abrufen der nächsten ID und Festlegen dieser vor dem Speichern der Entität gelöst werden. Dieser Ansatz umfasst die folgenden Schritte:

  1. Erstellen Sie eine separate Servicemethode, um neue IDs zu generieren.
  2. Rufen Sie innerhalb dieser Methode den maximalen ID-Wert aus der Tabelle ab, die der gespeicherten Entität entspricht .
  3. Erhöhen Sie die maximale ID um einen vordefinierten Wert (z. B. 1 oder 100 für erhöht). Parallelität).
  4. Gibt die generierte ID zurück.
  5. Ersetzen Sie in Ihrer DAO-Klasse die Annotation @GeneratedValue durch einen benutzerdefinierten Methodenaufruf, um die generierte ID abzurufen.
  6. Legen Sie diese als generiert fest ID mithilfe der setId()-Methode für die Entität vor dem Speichern.

Dieser Ansatz generiert effektiv neue IDs, ohne sich darauf verlassen zu müssen auf Sequenzen oder AUTO_INCREMENT. Es bietet mehr Flexibilität und stellt sicher, dass das Problem nicht vorhandener Sequenzen in MySQL gelöst wird.

Das obige ist der detaillierte Inhalt vonWie generiert man IDs für abstrakte Superklassen in Spring MVC-Anwendungen mit Hibernate und 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