0

我正在使用 Spring 3.2 与休眠 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
    }

}

这是弹簧配置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 仍然为null,外部无法获取内部插入数据。为什么??

谢谢!!

4

1 回答 1

1

已经有一个正在进行的交易,基本上有自己的数据版本。新添加的数据对该事务不可见。除此之外,您还混合使用了 hibernate,它使用缓存并且根据执行的内容,查询仅执行一次,并且在后续调用中它只返回缓存的值(例如在同一事务/会话中)。

链接

于 2013-09-09T11:17:33.207 回答