Maison  >  Article  >  base de données  >  Comment générer des identifiants pour les superclasses abstraites dans les applications Spring MVC à l'aide d'Hibernate et MySQL ?

Comment générer des identifiants pour les superclasses abstraites dans les applications Spring MVC à l'aide d'Hibernate et MySQL ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-09 20:34:02262parcourir

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

@GeneratedValue Superclasse abstraite polymorphe sur MySQL

Lorsque vous travaillez avec des superclasses abstraites et @GeneratedValue dans une application Spring MVC utilisant Hibernate et MySQL, il est Il est essentiel de prendre en compte les exigences spécifiques et les limites de la base de données. L'erreur « La table 'docbd.hibernate_sequences' n'existe pas » survient souvent lorsque GenerationType.TABLE est utilisé avec MySQL, qui ne prend pas en charge les séquences de manière native.

Aperçu du problème

Le problème se produit car GenerationType.TABLE nécessite une table appelée "hibernate_sequences" pour stocker les valeurs de séquence. Puisque MySQL ne dispose pas de cette table, Hibernate tente de la créer, ce qui entraîne l'erreur. De plus, l'utilisation de GenerationType.IDENTITY n'est pas réalisable lors de la gestion des identifiants dans une superclasse abstraite.

Solution

Malgré les limitations de GenerationType.TABLE et GenerationType.IDENTITY, il existe un solution qui répond aux deux problèmes. Au lieu de s'appuyer sur une table de séquence ou AUTO_INCREMENT, récupérer manuellement l'ID suivant et le définir avant d'enregistrer l'entité résoudra le problème. Cette approche implique les étapes suivantes :

  1. Créez une méthode de service distincte pour générer de nouveaux identifiants.
  2. Dans cette méthode, récupérez la valeur d'ID maximale de la table correspondant à l'entité en cours de sauvegarde. .
  3. Incrémentez l'ID maximum d'une valeur prédéfinie (par exemple, 1 ou 100 pour une augmentation concurrence).
  4. Renvoyer l'ID généré.
  5. Dans votre classe DAO, remplacez l'annotation @GeneratedValue par un appel de méthode personnalisée pour récupérer l'ID généré.
  6. Définissez cet ID généré. ID en utilisant la méthode setId() sur l'entité avant de l'enregistrer.

Cette approche génère efficacement de nouveaux identifiants sans s'appuyer sur séquences ou AUTO_INCREMENT. Il offre une plus grande flexibilité et garantit que le problème des séquences inexistantes dans MySQL est résolu.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn