Pourquoi la plupart des applications hibernées utilisent la séquence pour la génération d'identité? P>
Pourquoi ne pas utiliser la génération par défaut de type = Auto dans @GeneratedValue annotation? P>
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). P>
4 Réponses :
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. P>
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
de l'excellent livre pro JPA 2 mastering Java persistance API par Mike Keith et Merrick Schincario. P>
du chapitre 4: Cartographie relationnelle d'objet, génération d'identifiant de section. P>
[...] 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. P>
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. p>
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 [...] p> blockQuote>
Je vois plusieurs raisons: p>
Eyal P>
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> p>
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.