Je teste hibernate et donnez cette requête à et je reçois ces requêtes dans la ligne de commande: p> i J'utilise la fusion non enregistrée, alors pourquoi Hibernate met à jour mon objet, il ne devrait pas mettre à jour. Est-ce que ça va? Quelle est l'erreur? P> p>
3 Réponses :
Parce que la session n'est pas encore fermée et en termes de persévérance Ville code> est toujours joint à la session. Ainsi, toute modification de cet objet sera écoutée par la session Hibernate et une déclaration DML appropriée sera invoquée. P>
C'est vrai si j'utilise sauvegarde () non fusion (). S'il est toujours juste de fusionner, quelle est la différence entre sauvegarder et fusionner?
La fusion est utile lorsque vous avez des instances détachées. Dans le cas ci-dessus, lorsque vous fermez la session, vous avez toujours Ville code> objet. Supposons que vous apportez des modifications à de la ville code> après la fermeture de la session. Maintenant encore, vous ouvrez une session et vous voulez vous assurer que les modifications sont persistantes. Dans ce cas, vous utiliseriez fusion code> L'objet de la ville avec la session et l'hibernate s'assurera que les modifications sont reflétées dans la base de données. Enregistrer code> est principalement utilisé pour persister une entité et redonnerait l'identifiant.
Dans ce cas que vous avez décrit même, je peux utiliser Mettre à jour () pour le mettre à jour. Pas besoin d'utiliser la fusion () :(
C'est un problème de séquençage. En fait pas un problème. Hibernate fait exactement ce que vous avez dit de faire. Comme @tejasarjun dit, Fusionner consiste à fusionner des données détontées. Voici ce qui se passe:
J'ai eu votre point de vue merci de répondre, mais même je peux atteindre ce qui précède de cette façon: city.setname ("Q"); session = hibernatetutil.getssessionFactory (). OpenSession (); transaction = session.begintransaction (); session.update (ville); transaction.commit (); Pourquoi alors besoin de la méthode fusion ()? C'est le même
Voir mon exemple sur l'utilisation de la fusion de la deuxième réponse
Je vais essayer d'expliquer en utilisant un exemple plus concret. Supposons que vous ayez un scénario comme ci-dessous:
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
User userA = (User)session.get(User.class, 1101);
transaction.commit();
session.close();
//userA is now detached as session is closed.
session = sessionFactory.openSession();
transaction = session.beginTransaction();
User userB = (User)session.get(User.class, 1101);
User userC = (User)session.merge(userA);
if (userB == userC) {
System.out.println("Reattched user is equal");
}
transaction.commit();
session.close();
Chaque 'conversation' (demande client) code> peut avoir son propre usera code> référence, oui?
Ce lien peut être utile: Stackoverflow.com/questions/161224/...