我正在使用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 config 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()在第一个循环中为null。但是在ns.inner()执行之后,我将一些数据插入db并提交(我认为REQUIRES_NEW可以工作)。当第二个循环开始时,dao.findOne仍为null,外部 无法获取内部插入数据。为什么??
谢谢!
答案 0 :(得分:1)
已经有一个持续的交易基本上有自己的数据版本。新添加的数据对该事务不可见。接下来你在混合中休眠,它使用缓存并根据执行的内容,查询只执行一次,在后续调用中它只返回缓存的值(例如在同一个事务/会话中)。
链接