Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 21246|Répondre: 0

[Source] un objet différent avec la même valeur d’identifiant était déjà associé à...

[Copié le lien]
Publié sur 01/07/2016 10:48:52 | | | |
Un objet différent avec la même valeur d’identifiant était déjà associé à la session : 398fdbba-57b8-4d3d-b84b-4c0c0b497f02, de l’entité : XXX



J’ai rencontré cette erreur deux fois au total, et je n’ai jamais trouvé de bonne solution, et cette erreur s’est produite

La raison est probablement bien connue, car dans Hibernate, il y a deux logos identiques dans la même session

Cependant, s’il s’agit d’une entité différente, cette erreur sera signalée lors de l’exécution de l’opération saveOrUpdate(object).

Hehe, peut-être que tu diras, il n’y a pas de différence entre ce que tu dis et ce que tu ne dis pas, j’admets, hehe, je ne connais pas les détails

Pourquoi cette erreur s’est produite, sinon elle n’aurait pas été résolue avant longtemps, maintenant, donnez-nous une erreur temporaire

La solution est de donner à des personnes comme moi, qui n’ont aucun moyen de trouver la cause profonde, un moyen de continuer à mettre en œuvre

(Bien sûr, c’est exact, mais cela ne commence pas par la cause)
    En fait, il est très simple de résoudre ce problème, il suffit d’effectuer l’opération session.clean()

Mais vous avez effectué l’opération saveOrUpdate(object) après l’opération de nettoyage, ce qui est possible

« Trouvé deux représentations de la même collection », j’ai cherché beaucoup d’informations.

Il n’y a pas de bonne explication, ce que cet article aide le plus

http://opensource.atlassian.com/projects/hibernate/browse/HHH-509。

Enfin, cela peut être résolu par la méthode session.refresh(object), notez que lorsque l’objet n’est pas

Si c’est un objet contenant des données dans la base de données, vous ne pouvez pas utiliser le facteur session.refresh(object)

Pour rafraîchissement, il faut récupérer l’objet depuis la session d’hibernation, s’il n’y a pas d’objet dans la session

S’il y a cet objet, une erreur sera signalée, il faut donc juger avant d’utiliser saveOrUpdate(object).

Casse-le

    Bien sûr, la solution la plus simple à ce problème est d’utiliser le merge() fourni avec Hibernate.

méthode. Cependant, j’ai toujours l’impression que lorsque je rencontre des problèmes, j’utilise la méthode très utile fournie avec ce logiciel

(comparé à saveOrUpdate(), save(), update()) est très désagréable.
    Plus tard, j’ai aussi constaté que cette erreur apparaît souvent dans la correspondance un vers plusieurs et la correspondance multi-à-plusieurs, merci d’être ici

Soyez prudent lorsque vous utilisez la correspondance un à plusieurs et à plusieurs
Dépannage et gestion de Hibernate
1、un objet différent avec la même valeur d’identifiant était déjà associé à la session。
Raison de l’erreur : En hibernation, il y a deux identités identiques dans la même session, mais des entités différentes.
Solution de contournement 1 : session.clean()
PS : Si vous effectuez des opérations pour modifier l’état des données comme saveOrUpdate(object) après l’opération nettoyante, vous pouvez recevoir une exception « Deux représentations trouvées de la même collection ».
Solution de contournement 2 : session.refresh(object)
PS : Lorsque l’objet n’est pas un objet contenant des données dans la base de données, vous ne pouvez pas utiliser session.refresh(object) car la méthode consiste à récupérer l’objet depuis la session d’hibernation ; s’il n’y a pas d’objet dans la session, une erreur sera signalée, donc vous devez juger avant d’utiliser saveOrUpdate(object).
Solution 3 : session.merge(object)
PS : La méthode de Hibernate est recommandée.
2、Trouvé deux représentations d’une même collection
Cause de l’erreur : Voir 1.
Solution de contournement : session.merge(object)
Les deux anomalies ci-dessus apparaissent souvent dans le mappage un-à-plusieurs et le mappage multi-à-plusieurs




Causes d’erreur :

Mythe :Vous ne pouvez pas créer un nouvel objet utilisateur puis obtenir les informations utilisateur basées sur l’identifiant utilisateur et les attribuer à cet objet, de sorte qu’un autre objet avec la même valeur d’identifiant soit déjà associé à l’erreur de session !!





Précédent:Utilisation de la dynamique en C# 4.0
Prochain:Clone de la réplication superficielle des objets C#
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com