7
votes

Pourquoi la plupart des applications hibernées utilisent-elles une séquence pour la génération d'identité?

Pourquoi la plupart des applications hibernées utilisent la séquence pour la génération d'identité?

Pourquoi ne pas utiliser la génération par défaut de type = Auto dans @GeneratedValue annotation?

P.s. Dans ma carrière professionnelle, je vois que tout le monde utilise des séquences, mais je ne comprends pas pourquoi ils se soucient d'une solution plus difficile à déployer (il y a toujours une séquence Créer une commande SQL dans les instructions de déploiement).


2 commentaires

Quelle base de données avez-vous ciblée? L'auto est assez courante pour les utilisateurs de MySQL, mais pas pour Oracle ou MS. Toutes les stratégies de génération ont malheureusement, c'est pourquoi il y en a beaucoup d'entre eux.


@Will Oracle. Je pense qu'il doit y avoir une raison derrière cela.


4 Réponses :


1
votes

au moins pour Oracle: une raison est de pouvoir suivre le nombre d'objets dans une table (pour laquelle la séquence spécifique à la table est bonne, si aucun objet n'est supprimé de la table). Utilisation de GenerationType = Auto utilise un numéro de séquence globale, ce qui entraîne des lacunes dans des numéros d'identification lors de la présentation de plusieurs table dans la base de données.


2 commentaires

Observation intéressante, je vais vérifier cela


J'ai utilisé GenerationType = Auto et j'ai remarqué l'écart d'identification entre des rangées consécutives



4
votes

de l'excellent livre pro JPA 2 mastering Java persistance API par Mike Keith et Merrick Schincario.

du chapitre 4: Cartographie relationnelle d'objet, génération d'identifiant de section.

[...] si une application ne se soucie pas de quoi genre de génération est utilisé par le fournisseur mais veut génération de se produire, il peut spécifier une stratégie de Auto.

Il y a une capture à utiliser automatiquement, bien que. Le fournisseur arrive à choisir son propre stratégie pour stocker les identifiants, mais il a besoin d'avoir une sorte de ressource persistante pour le faire. Par exemple, s'il choisit un stratégie de table, il doit créer une table; Si ça choisit un stratégie basée sur la séquence, il doit créer une séquence. Le fournisseur ne peut pas prétendez toujours sur la connexion de la base de données qu'il obtient du serveur à avoir des autorisations pour créer une table dans la base de données. C'est normalement un opération privilégiée qui est souvent restreint à la DBA. Il y aura besoin être une sorte de phase de création ou génération de schéma pour causer la Ressource à créer avant l'auto la stratégie est capable de fonctionner.

Le mode automatique est vraiment une génération Stratégie de développement ou prototypage. Cela fonctionne bien comme un moyen de vous faire fonctionner plus rapidement lorsque le schéma de base de données est être généré. Dans n'importe quel autre situation, il serait préférable d'utiliser une des autres stratégies de génération discuté dans les sections ultérieures [...]


0 commentaires

7
votes

Je vois plusieurs raisons:

  1. La base de données la plus utilisée dans les applications Enterprise est probablement Oracle et Oracle n'a pas d'identifiants générés automatiquement, mais de séquences. Les séquences
  2. permettent d'avoir l'ID avant d'insérer une nouvelle ligne, plutôt qu'après l'insertion de la nouvelle ligne. Cela est plus facile à utiliser et plus efficace car vous pouvez faire des relevés d'insertion par lots à la fin de la transaction mais que vous avez toujours des identifiants définis au milieu de la transaction.
  3. Les séquences permettent d'utiliser des algorithmes Hilo (qui correspond à la valeur par défaut avec la génération de séquence hibernate) et ne faisant ainsi qu'un appel de DB pour plusieurs inserts, augmentant ainsi les performances.
  4. Auto varie entre des bases de données, tandis que la séquence utilise toujours la même stratégie.

0 commentaires

1
votes


Il existe différentes considérations pour choisir le générateur d'identité, les plus importantes sont les performances et la portabilité, mais également en regroupement et la migration des données pourrait être une considération.

Dans la pratique dans les dernières versions hibernées (sinon toutes), la stratégie de séquence est en fait une séquence basée sur HILO et non une séquence pure, de même que les gens supposent.

Vous pouvez lire une belle publication sur les stratégies de génération d'identité sur mon blog: ici < / a>

Eyal


0 commentaires