0

在一个休眠会话中。

我首先通过使用 session.get(id, class) 检索一条记录来获得一个对象,比如 A,我对对象 A 进行了一些更改。

然后我使用criteria.list() 进行搜索以获取一个对象列表,其中包含对象B 引用相同的数据对象A 引用。我还对对象 B 进行了一些更改。

在我提交会话后,我所做的哪些更改将被持久化到数据库、A 或 B 或两者?

4

2 回答 2

0

没有任何!你会得到一个异常说:org.hibernate.NonUniqueObjectException:一个具有相同标识符值的不同对象已经与会话相关联,merge()除非你使用方法手动管理它们。

于 2013-10-17T06:09:22.023 回答
0

每次从数据库中获取某些内容时,它都会创建一个新对象。即使对象的值相同,它内部也是不同的。

如果您只获取一次值并创建对象的副本,那么它只会创建对该对象的引用,因此第一个中的任何更改也将反映到第二个中。

当您提交更改时,保存的最后一个对象的值将是表内的值。原因是,前一个对象的值首先被保存,然后被第二个对象覆盖。

于 2013-10-17T05:46:28.837 回答