解决方案 »

  1.   

    如果事务管理没问题。调用session的flush()方法啊,
    其实最好让spring自动管理
      

  2.   

    咋管理啊,没怎么用过spring,拿厂商的代码直接改的,
    spring事务管理是这么写的:<!-- 事务管理器配置,单数据源事务 -->
    <bean id="transactionManager"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager"
    lazy-init="true">
    <property name="sessionFactory" ref="sessionFactory" />
    </bean>
      

  3.   

    那就在你的业务方发上或者类上加个@Transactional
    业务类上加@Service
    如果
    @Transactional加在类上,那么这个类的公共方法都有事务,
    然后你还要启动spring配置文件,写个测试类调用
    public class Test {    public static void main(String[] args) {

         ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
        
         A a = (A) ac.getBean("a");     a.updateFlag()    }
    }@Transactional
    @Service
    public class A{
      String id;
      boolean flag = false;
    }
     
    public classB{
      String id;
      String idA;// 对象A的id值
    }
     
    public void method(){
    updateFlag(List<A> aList);
    selectFlag(List<B> bList);
    }
     
    public void updateFlag(List<A> aList){
       // 更新aList 中对象A的flag 为  true
    }
     
    public void selectFlag(List<B> bList){
     // 查询 bList 中B对象属性 idA
     // 更具idA去数据库查询记录 对应的flag
    }
      

  4.   

    你想要实现代码一执行,然后,就提交了,那可以不用事务,spring与hibernate的整合,黙认就是这种功能呀。如果不行,你就改一下配置,hibernate.connection.autocommit=true
    你这样,试试。
      

  5.   

    只要你的事务边界在 method 方法上面就可以保证它们共享单一物理连接,也就在同一个事务中,这个时候不管事务隔离级别是什么我们在同一个事务中看到的状态值都是一致的。要是感觉它们像是互相不能感知对方的状态,那可能是它们用了两个不同的物理连接也就是两个事务在运行(这时候根据数据源引用上配置的事务隔离级别的不同,有些能感知,有些不能感知)。至于 Spring 如何来声明事务的边界 (transaction demarcation)我并不清楚,应该是在 xml 配置中完成的,期望其它有实践经验的大神来解答怎么配置合适的事务界定声明。