Comment choisir la stratégie de génération d'identifiant lors de l'utilisation de JPA et Hibernate
J'ai été en passant par génération d'Id de l'article de la veille prolongée guide de référence et de "java persistance avec Hibernate"
Il ya quelques options disponibles avec Hibernate et JPA combiné.
Je cherchais une documentation supplémentaire sur la façon de choisir le spécifique de la stratégie de génération d'identifiant.
Je suis également à la recherche de points de basculement.
Par exemple, hilo stratégie devrait permettre de réduire les conflits. Je suis en supposant qu'il doit y avoir un compromis associés à ce choix.
Je veux être éduqués sur les compromis.
Est-il à la littérature?
Vous devez vous connecter pour publier un commentaire.
La Doc API sont très clairs sur ce point.
Si vous construisez une application simple avec pas beaucoup d'utilisateurs simultanés, vous pouvez aller pour incrément, de l'identité, de hilo etc.., Qui sont simples à configurer et n'a pas besoin de beaucoup de codage à l'intérieur de la db.
Vous devez choisir séquence ou guid en fonction de votre base de données. Ils sont sûrs et mieux parce que le
id
génération va se passer à l'intérieur de la base de données.Mise à jour:
Récemment, nous avons eu un problème avec idendity où de type primitif (int), ce problème a été résolu en utilisant warapper type (Entier) à la place.
En gros, vous avez deux choix principaux:
@GeneratedValue
annotation et Hibernate va attribuer l'identifiant pour vous.Pour les identifiants générés, vous avez deux options:
Pour les identificateurs numériques vous avez trois options:
IDENTITÉ est un bon choix lorsque vous ne pouvez pas utiliser la SÉQUENCE (par exemple MySQL) parce que il désactive JDBC mises à jour par lot.
SÉQUENCE est l'option à privilégier, en particulier lorsqu'il est utilisé avec un identifiant de l'optimiseur comme commun ou commun-lo.
Le TABLEAU est à éviter à tout prix car il utilise une transaction distincte pour récupérer l'identifiant et au niveau de la ligne des verrous qui les échelles de mal.
Il y a un moment, j'ai écrit un article détaillé sur Hibernate des générateurs de clés: http://blog.eyallupu.com/2011/01/hibernatejpa-identity-generators.html
Le choix d'un générateur est une tâche compliquée, mais il est important d'essayer et obtenir le plus vite possible, car un retard de migration peut être un cauchemar.
Un peu hors sujet, mais une bonne occasion de soulever un point souvent négligé, qui est le partage de clés entre les applications (via API). Personnellement, je préfère toujours les clés de substitution et si j'ai besoin de communiquer mes objets avec d'autres systèmes, je n'expose pas ma clé (même si elle est porteuse d'un) – je utiliser un externe de la clé". En tant que consultant, j'ai vu plus d'une fois de "grands" l'intégration des systèmes à l'aide de clés de l'objet (le " c'est là, nous allons simplement utiliser une approche d') juste pour trouver un ou deux ans plus tard que, d'un côté a des problèmes avec la clé de la gamme ou quelque chose du genre exigeant une profonde migration sur le système d'exposer ses clés internes. Exposer votre clé signifie révéler un aspect fondamental de votre code externe limite ne devrait pas vraiment être exposé.
Je trouve cette présentation très précieux https://vimeo.com/190275665, point 3, il résume ces générateurs et donne quelques analyse de la performance et de l'orientation lorsque vous utilisez chacun d'eux.