我试图了解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