3

我有三层,即Action、Service、DAO 层。我已经使用 ID 为 123 的休眠从 DB 加载了一个对象(雇员类)。我对雇员对象进行了一些修改。后来,我创建了休眠业务对象并对其进行了一些修改。

Employee e = service.getEmp(123);
e.setName("Ashok");

Order o = new Order
o.setNumber(567);

service.saveOrUpdate(o);

在这种情况下,为什么它试图更新员工对象,即使我没有说要保存它?如何从会话中分离它?我不希望休眠更新员工对象。

4

1 回答 1

3

在这种情况下,为什么它试图更新员工对象,即使我没有说要保存它?

我引用休眠文档

事务性持久实例(即由 Session 加载、保存、创建或查询的对象)可以由应用程序操作,并且在刷新 Session 时,对持久状态的任何更改都将被持久化。[...]。无需调用特定方法(如具有不同目的的 update())来使您的修改持久化。

如何将其与会话分离?

用 标记集合cascade="evict"。然后在刷新对象之前Session.evict(Object)对象(如果您已经FlushMode.AUTO将其设置为,MANUAL直到您完成了您想要的操作)。

于 2012-12-11T18:27:39.857 回答