我試圖瞭解Hibernate中對象的不同狀態。我嘗試了以下方法,但找不到所示行爲的解釋。誰能幫忙?Hibernate持久對象行爲
這是我正在做的事情:在Employee表中插入一條新記錄(empId是主鍵)。在同一個事務中,更新新添加的記錄(使用查詢,修改empName)。然後當我檢查持久對象的empName屬性時,它繼續顯示舊的empName值。作爲一個持久對象,我期望它能夠反映數據庫中所做的更改。我不明白爲什麼它沒有。 (我的hibernate配置文件除了「hibernate.hbm2ddl.auto」屬性被設置爲更新之外,其他都設置爲默認值) 但是,在更新之後,當我設置持久對象的empName時,getEmpName返回值(顯示爲舊的empName值由sysout),表中的最終數據顯示新的empName值(即我使用hql更新的值)。請參考此代碼:
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
感謝您的意見德米特里和肯。幫助我瞭解了大部分問題。但是,在做tx.commit()之前,我將e1.empName設置爲舊值(即e1.getEmpName()返回的值)。仍然在數據庫中看到的最終值是新值。 – Leo
不客氣,請參閱我的更新PLZ –
謝謝。這使得一切都清晰可見。 – Leo