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

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

Linda Hamilton
Linda Hamiltonoriginal
2024-11-12 22:17:02870parcourir

How to Generate IDs for Abstract Superclasses in a Spring MVC Application Using Hibernate and MySQL?

Superclasse abstraite polymorphe et génération d'identité MySQL

Dans une application Spring MVC utilisant Hibernate et MySQL, le défi de la gestion des identifiants pour les superclasses abstraites et leurs sous-classes apparaissent. GenerationType.IDENTITY n'est pas compatible avec les superclasses abstraites et MySQL ne prend pas en charge les séquences. Comment ce problème peut-il être résolu ?

Tout d'abord, il est important de comprendre la limitation de MySQL : il ne peut pas générer d'identifiants et insérer des enregistrements simultanément. Hibernate, cependant, s'attend à cette fonctionnalité lors des insertions d'entités.

Pour résoudre ce problème, une table "LAST_IDS" peut être implémentée. Ce tableau suit les derniers identifiants attribués pour chaque entité pertinente. Les étapes suivantes décrivent le processus de génération et de conservation des identifiants à l'aide de cette approche :

  1. Transaction optimiste en lecture initiée
  2. Requête d'ID maximum : SELECT MAX(entity_id) FROM LAST_IDS
  3. Stockage des variables : Attribuez l'ID maximum à une variable ($OldID).
  4. Nouveau calcul d'ID : $NewID = $OldID 1 (ou supérieur pour le verrouillage pessimiste).
  5. Mise à jour optimiste : UPDATE LAST_IDS SETentity_id= $NewID WHEREentity_id= $OldID?
  6. Commission de transaction : Validez la transaction optimiste.
  7. Affectation à l'entité : Si la validation réussit, définissez le $NewID généré sur l'entité à enregistrer à l'aide de setID().
  8. Insertion Hibernate : Hibernate exécute l'opération d'insertion.

En utilisant cette approche, la génération et la gestion des identifiants deviennent compatibles avec les superclasses abstraites et les limitations de MySQL. Il est à noter que l'héritage dans les entités Hibernate ne doit généralement être utilisé que lors de la prise en charge des relations d'héritage dans la base de données, comme PostgreSQL ou Oracle.

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