Comment faire pour obtenir l'auto-incrémenter la valeur de la clé primaire dans MySQL en utilisant Hibernate
Je suis de l'utilisation d'Hibernate pour accéder à MySQL, et j'ai une table avec un auto-incrément de la clé primaire.
Chaque fois que j'insère une ligne dans la table je n'ai pas besoin de spécifier la clé primaire. Mais après que j'ai insérer une nouvelle ligne, comment puis-je obtenir la relative clé primaire immédiatement l'utilisation d'hibernate?
Ou je peux utiliser jdbc pour ce faire?
OriginalL'auteur Neo | 2011-06-14
Vous devez vous connecter pour publier un commentaire.
Lorsque vous enregistrez le hibernate entity, la
id
propriété sera rempli pour vous. Donc, si vous avezJ'ai fait presque toujours un
assertNotNull
sur l'id d'un persisté entité dans mes tests pour s'assurer que l'enregistrer travaillé.OriginalL'auteur hvgotcodes
Une fois que vous avez persisté à l'objet, vous devez être en mesure d'appeler getId() ou quel que soit votre @colonne ID est, si vous pouviez retourner dans votre méthode. Vous pourriez également pour effet d'invalider la veille prolongée premier niveau de cache et de le récupérer à nouveau.
Cependant, pour des raisons de portabilité, vous voudrez peut-être regarder à l'utilisation d'Hibernate avec la séquence de style de génération d'IDENTIFIANT. Cela permettra de faciliter la transition à partir de MySQL si vous en avez besoin. Certainement, si vous utilisez ce type de générateur, vous serez en mesure d'obtenir l'ID immédiatement, parce que Hibernate a besoin de régler la valeur de la colonne avant qu'il persiste l'objet:
C'est un peu plus complexe, mais c'est le genre de chose que vous pouvez couper et coller, en dehors de changer le nom de la SÉQUENCE.
OriginalL'auteur Mick Sear
Lorsque vous appelez une méthode save() en mode veille prolongée, l'objet ne sont pas écrites dans la base de données immédiatement. Il se produit lorsque vous essayez de lire à partir de la base de données (à partir de la même table?) ou appeler explicitement la méthode flush(). Jusqu'à ce que l'enregistrement correspondant n'est pas insérée dans la table de base de données, MySQL ne serait pas allouer un id pour elle.
Donc, l'id est disponible, mais pas avant d'Hiberner en fait insère l'enregistrement dans la table MySQL.
OriginalL'auteur Olaf
Si vous le souhaitez, vous pouvez obtenir le prochain clé primaire indépendamment d'un objet à l'aide de:
OriginalL'auteur iliaden
Bien dans le cas de l'auto incrément générateur de classe, lorsque nous utilisons le
save()
méthode retourne la clé primaire (en supposant que sonid
). On en revient donc que particulierid
, de sorte que vous pouvez le faireEt retour
id
OriginalL'auteur kRIdAi uzumaki