2013-04-10 66 views
0

我有一个事务获取一些数据,插入一些数据并在一个表上进行更新。此更新的表正在导致一些Oracle锁定,所以我想从此事务中取出更新并在我的过程结束时启动一个新事务来执行更新。如何从稍后完成的事务中取出更新?

所以目前我得到的更新后的表中加入,后来才知道,在对象更新一些数据,然后在交易结束时,Hibernate并它的神奇和更新表。我想改变这种情况,我想,在事务开始时获取数据,分离对象,更新对象中的数据,然后在新事务中执行merge()。可能?我不知道如何分离它作为HibernateTemplate没有detach()方法。

不知道这事,但我有一个一对一的关联:

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

任何想法?我不理解分离吗?我相信驱逐()从缓存或东西删除它,这不是我想做的事......

回答

1

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

第二:休眠不具有分离,但它具有Session.evict()方法,该方法的对象出休眠的控制。如果您想再次将其置于Hibernate的控制之下并合并它,则必须再次从数据库加载该对象,并将其合并为手动复制修改后的属性。

+0

谢谢!我试过这个,它的工作原理。所以我逐出了对象,然后当事务结束时,我开始一个新的并合并()它。完善! – markthegrea 2013-04-12 18:12:49

相关问题