Spring配置事务为一个Service方法一次事务
现在jdbc操作和Hibernate查询操作在同一个Service方法中,先jdbc插入数据,随后Hibernate读取jdbc插入的数据。
数据库里面已经有了jdbc插入数据,但是Hibernate查询不出来
jdbc操作开始事务并提交注:没有开启二级缓存,查询缓存。隔离级别试过,查询方法加上事务也试过,都查询不到数据,语句没有问题,如果用Hibernate插入就能查询到。

解决方案 »

  1.   

    补充一下代码:先发一个 jdbc的dao 实现方法public baseDaoImpl{
    public void addByBatch(List l ){ getHibernateTemplate().execute(new HibernateCallback() { public Object doInHibernate(Session session)
    throws HibernateException, SQLException {
    session = getSessionFactory().openSession();
    org.hibernate.Transaction tran = session.beginTransaction(); Connection connection = session.connection();
    /**
    批量处理省略代码。
    **/ pstmt.executeBatch();
    pstmt.clearBatch();
    pstmt.close();
    tran.commit();
    session.flush();
    session.clear();
    session.disconnect();
    return null;
    } });

    }
    }service  中
    大体逻辑是这样public BaseServiceImpl{public void add(){
    //先调用jdbc添加
    baseDaoImpl.addByBatch(list); /**
        上面代码执行完数据库有数据
    **///Hibernate查询
    List l = baseDaoImpl.get(...);/**
        l中没有数据
    **/}
    }
      

  2.   

    你在同一个方法中。在 jdbc 操作完 其实数据库里应该没数据。 因为事物是要把所有的方法都执行完才提交。  所以你可以用hibernate去执行jdbc操作。 
      

  3.   

    关注Java
      

  4.   

    顺便问一句 session.disconnect(); 你没用spring吗? 如果有用了就不要写这句代码
      

  5.   


    我的jdbc中事务提交了,所以数据库有数据了。可是Hibernate搜索不到
    使用了Spring,但是用jdbc连接时,好像session不会被自动回收,所以调用了disconnect
      

  6.   


    还有一点,Hibernate使用JDBC可以使用PreparedStatement做批量吗?指点下
      

  7.   

    想问一下,你说的数据库有数据是真的?试着在数据库中手动commit一下瞧瞧