【发布时间】:2011-11-18 21:52:03
【问题描述】:
我试图了解 Hibernate 中对象的不同状态。我尝试了以下操作,但找不到对所示行为的解释。有人可以帮忙吗?
这是我想要做的:在 Employee 表中插入一条新记录(empId 是主键)。在同一事务中,更新新添加的记录(使用查询,修改 empName)。然后,当我检查持久对象的 empName 属性时,它会继续显示旧的 empName 值。作为一个持久对象,我希望它能够反映数据库中所做的更改。我不明白为什么没有。 (我的休眠配置文件将所有内容都设置为默认值,但“hibernate.hbm2ddl.auto”属性设置为更新) 但是,在进行更新之后,当我使用 getEmpName 返回的值(sysout 显示为旧 empName 值)设置持久对象的 empName 时,表中的最终数据显示新的 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
【问题讨论】:
标签: java hibernate persistence