【发布时间】:2013-09-09 10:40:34
【问题描述】:
我正在使用 Spring 3.2 与 hibernate 4 集成 这是我的代码
@Service
public class MyService{
@AutoWired
private NestedServcie ns;
@Transactional(propagation=Propagation.REQUIRED)
public void outer(){
while(true){
dao.findOne(); // This method find data from db using hibernate hql
ns.inner(); // insert some data and commit and loop again.
}
}
}
@Service
public class NestedServcie{
@Transactional(propagation=Propagation.REQUIRES_NEW)
public void inner(){
//here insert some data into db using hibernate
}
}
这里是spring配置xml
<tx:annotation-driven transaction-manager="transactionManager"/>
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
这是我的问题 在我运行这个程序之前,db 中没有数据,所以 dao.findOne() 在第一个循环中为空。但是在 ns.inner() 执行之后,我将一些数据插入 db 并提交(我认为 REQUIRES_NEW 有效)。而当第二个循环开始时,dao.findOne 仍然为空,外层 无法获取内部插入数据。为什么??
谢谢!!
【问题讨论】:
-
当您将外部更改为 Propagation.REQUIRES_NEW 时会发生什么?或者您可以在调用 ns.inner() 之前检查当前事务名称吗?
-
将代码发布到您的 dao