0

我有一个事务,它获取一些数据,插入一些数据并在一个表上进行更新。这个更新的表导致了一些 Oracle 锁定,所以我想从这个事务中取出更新,并在我的进程结束时启动一个新事务来进行更新。

所以目前我在连接中获得更新的表,然后我更新对象中的一些数据,然后在事务结束时,休眠它很神奇并更新表。我想改变这一点,在事务开始时获取数据,分离对象,更新对象中的数据,然后在新事务中执行合并()。可能的?我不知道如何分离它,因为 HibernateTemplate 没有 detach() 方法。

不确定这是否重要,但我有一个一对一的关联:

 <one-to-one name="itmInstSum" class="dds.tmatic.domain.ItmInstSum" fetch="join"  />

有任何想法吗?我不理解分离吗?我相信 evict() 将其从缓存中删除或其他东西,这不是我想要做的......

4

1 回答 1

1

首先:在 commit() 方法中,Hibernate 重新排列数据库语句的顺序,这有时会产生不需要的结果。Session.flush()你可以影响这种行为。Hibernate 只在两个flush() 语句之间重新排列语句(commit() 隐式调用flush())。

第二:Hibernate没有detach,但是有Session.evict()方法,让对象脱离Hibernate的控制。如果您想再次将其置于 Hibernate 的控制之下并合并它,那么您必须再次从数据库中加载对象并合并它,即手动复制修改后的属性。

于 2013-04-11T12:45:16.860 回答