En utilisant la séquence dans MySQL et Hibernate
Je suis en train de travailler sur un projet qui utilise la mise en veille prolongée et MySQL. J'ai l'intention d'utiliser la séquence de générer des ID pour toutes les tables dans la base de données. (Il est difficile de décrire ma question, donc je vais vous montrer un exemple).
Par exemple: j'ai 2 tables A & B. tout d'Abord, je insérer 10 enregistrements à Une table, et leur Id sera de 1 à 10. Ensuite, j'ai insérer 10 enregistrements de la table B, et je veux leur Id sera 11-20, pas 1-10. Il désigne l'IDENTIFIANT généré de la valeur seront comptabilisées par tous les enregistrements de toutes les tables dans les bases de données, et non pas dans une seule table.
Alors, comment puis-je utiliser ce concept dans MySQL? Déclarer et de syntaxe?
En mode veille prolongée, comment puis-je utiliser la stratégie et de la génératrice sur les données du modèle à appliquer, qui a généré de la stratégie dans la base de données?
Merci beaucoup!
OriginalL'auteur | 2011-02-16
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas de séquences dans Mysql, mais vous pouvez utiliser la fonction "TABLEAU" de génération d'identifiant
Vous pourriez avoir besoin d'ajouter de l'extrait de
@javax.persistence.TableGenerator [...]
dans toutes vos entitésModifier
Malheureusement, je ne connais pas un moyen élégant pour ce faire :(. Dans mon projet, nous utilisons l'une séquence en plusieurs entités, et nous avons besoin de déclarer la séquence dans chaque classe.
Une chose que vous pourriez essayer (mais je n'aime pas vraiment) est de créer un super-classe pour tous vos entités, et que la super-classe ne contient que le champ ID et les annotations. J'ai le sentiment que j'ai vu cela dans un projet, mais je ne suis pas sûr à 100%.
Dire à la DB pour utiliser cette stratégie, je ne pense pas que c'est vraiment possible. Vous pouvez essayer d'ajouter un élément déclencheur, et l'appliquer à chaque table, dans le schéma. Le déclenchement de l'incendie lorsque vous insérez une nouvelle ligne dans le tableau, sélectionner une valeur à partir de la générateur de table, et l'ajouter à la ligne. Honnêtement, je ne sais pas si cela pourrait fonctionner, et je suis sûr à 99% que cela ne fonctionnera pas si vous avez 2 sessions simultanées de création de lignes.
Pouvez-vous repenser votre stratégie et à l'utilisation normale de l'auto-incrémentation des colonnes pour les id et mettre le numéro séquentiel dans une autre colonne de votre table?
J'ai un problème similaire. Êtes-vous prêt à m'aider avec cela? voici le lien: stackoverflow.com/questions/25252541/...
Évitez d'utiliser des
GenerationType.TABLE
, car Elle implique pessimiste serrures pour générer des valeurs uniques. Toutefois, Si vous voulez continuer à l'utiliser alors également utiliser certaines techniques d'optimisation (par exemplepooled
) afin de réduire le supplément de requêtes de base de données. UtilisationGenerationType.IDENTITY
à la place.OriginalL'auteur Augusto