J'essayais de connaître les différents états d'objets dans Hibernate. J'ai essayé ce qui suit et je n'ai pas trouvé d'explication au comportement montré. Quelqu'un peut-il aider?Comportement d'objets persistants Hibernate
Voici ce que j'essaie de faire: Insérer un nouvel enregistrement dans la table des employés (empId étant la clé primaire). Dans la même transaction, mettez à jour l'enregistrement nouvellement ajouté (à l'aide d'une requête, en modifiant nomImpl). Puis, lorsque je vérifie la propriété empName de l'objet persistant, elle continue à afficher l'ancienne valeur empName. Étant un objet persistant, je m'attendais à ce qu'il reflète la modification apportée à la base de données. Je ne pouvais pas comprendre pourquoi ça ne l'était pas. (Mon fichier de configuration hibernate a tout réglé par défaut, sauf pour la propriété "hibernate.hbm2ddl.auto" définie comme mise à jour) Cependant, après avoir fait la mise à jour, quand j'ai défini le nom empName de l'objet persistant avec la valeur retournée par getEmpName (qui s'affiche comme old empName value par sysout), les données finales de la table affichent la nouvelle valeur empName (c'est-à-dire celle que j'ai mise à jour en utilisant hql). S'il vous plaît faites référence au code pour cela:
Transaction tx = session.getTransaction();
tx.begin();
Employee e1 = new Employee();
e1.setEmpId(1);
e1.setEmpName("Jack");
e1.setEmpAge(25);
session.save(e1);
System.out.println("before: "+e1.getEmpName()); //prints Jack
session.createQuery("update Employee set empName = \'Jack_new\' where id=1").executeUpdate();
System.out.println("after: "+e1.getEmpName()); //prints Jack
e1.setEmpName(e1.getEmpName()); //should update database
tx.commit(); //sets empName value to Jack_new, as seen in table
System.out.println("last: "+e1.getEmpName()); //prints Jack
Merci pour vos commentaires Dmitry et Ken. M'a aidé à comprendre la plupart du problème. Cependant, juste avant de faire tx.commit(), je mets e1.empName à l'ancienne valeur (c'est-à-dire la valeur renvoyée par e1.getEmpName()) .Toutefois, la valeur finale vue dans la base de données est la nouvelle valeur. – Leo
Vous êtes les bienvenus, voir ma mise à jour plz –
Merci Ken. Cela rend tout clair. – Leo