Comment est mon id généré avec JPA de l'utilisation d'Hibernate avec l'Oracle 10g dialecte?
J'ai un code:
@Id
@SequenceGenerator(name = "SOMETHING_SEQ")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SOMETHING_SEQ")
@Column(name = "SOMETHING", nullable = false)
private Long id;
Comment hibernate fournir ma carte d'identité?
Je vois dans ma base de données il y a une seule séquence nommée "hibernate_sequence" et pas d'autres hibernate spécial des tables.
OriginalL'auteur JavaRocky | 2010-03-05
Vous devez vous connecter pour publier un commentaire.
En fait, ici votre
SOMETHING_SEQ
est le nom de la séquence que vous avez configuré quelque part dans votre hibernate config. Ethibernate_sequence
est le nom de la séquence dans la base de données. Dans la configuration, il serait à la recherche de quelque chose comme ci-dessous,Vous pouvez sauter cette configuration en utilisant l'annotation à la place. Ensuite, votre
@SequenceGenerator
annotation devrait fournir quelques paramètres. Ci-dessous est l'exemple.Par exemple plusieurs classes d'entité ferait quelque chose comme ci-dessous,
À l'aide de la
hibernate-seq
, et bien sûr, quand vous avez dit Hibernate pour l'obtenir, vous ne devez pas fournir tout vous-même. Ou même si vous fournissez une valeur, cette valeur va être écrasé.Vous dites que plusieurs entités partagent cette même hibernate séquence?
Pas nécessairement. Vous pouvez définir autrement, vérifier mon addemdum. Si vous avez défini juste une séquence pour chaque entité, alors oui, il va utiliser la même séquence.
OriginalL'auteur Adeel Ansari
Bien, vous dit de manière explicite la JPA moteur pour générer identifiant automatiquement (avec la
@GeneratedValue
annotation) à l'aide d'une stratégie de typeSEQUENCE
indiquant qu'un base de données de séquence devraient être utilisées pour générer l'identifiant. Dans le cas où vous vous demandez, les séquences sont de la base de données des objets spécifiques (par exemple, Oracle) qui peuvent être utilisés pour générer des entiers uniques.Vous n'utilisez pas le
sequenceName
annotation élément dans votre@SequenceGenerator
pour spécifier le nom de la base de données de la séquence de l'objet à utiliser Hibernate créé par défaut un objet séquence au cours de génération de schéma (qui est par défauthibernate_sequence
). Pour spécifier une séquence, procédez comme ceci:OriginalL'auteur Pascal Thivent
Pour le nom de la séquence que vous devez définir la
sequenceName
dans votre@SequenceGenerator
annotation:De noter que si vous utilisez un pré-existants générateur, votre
allocationSize
doit correspondre à la taille d'allocation de ce générateur.OriginalL'auteur kgrad
Dans Oracle vous n'avez pas l'auto_increment type que dans MySQL. Donc, pour générer une colonne de type auto_increment vous avez besoin d'utiliser une séquence.
Ceci est un exemple de la façon dont vous pouvez atteindre cet objectif.
Ainsi, vous créez une séquence et l'utilisation d'un déclencheur avant chaque ligne est insérée à ajouter son id.
Donc hibernate doit faire quelque chose comme cela, ou au lieu d'utiliser le déclencheur de faire
Remarque: Exemple de prise de ici
il utilise la séquence pour vous. Maintenant, si il utilise le déclencheur ou la ligne d'insertion, de configurer hibernate pour montrer sql ou vérifier si un déclencheur a été généré
Hibernate ne pas utiliser un déclencheur, il devient simplement le
nextval
sur insérer.OriginalL'auteur Lombo