执行了getHibernateTemplate.save(user)后,控制台有hql语句输出,显示已经将数据存到数据库了,也没有抛出异常,但是去oracle数据库查的时候,压根就没有数据。请问是怎么回事?就下面这段代码:public void save(User user) { getHibernateTemplate().save(user); } 

解决方案 »

  1.   

    你是在UnitTest里,如果是的话,多半你们设置了自动回滚为每一个测试方法。另外,你你检查一下,插入数据后,在你的事务提交之前,是不是发生了什么异常,如果有异常的话,事务不会提交,会回滚掉之前的操作。
      

  2.   

    没有发生异常,我在getHibernateTemplate().save(user); 方法之后,
    我又写了下面面的查询语句:
    String hql="from User as u where u.userName=?";
    List list = this.template.find(hql,user.getUserName);

    能查出来刚才插入的数据,但是这个数据并没有存入数据库里面。
      

  3.   

    hibernate没有使用spring事务代理的时候,默认不是自动提交的,
    你这里需要手动的commit一下把
    Transaction tran=session.openTran.....
    getHibernateTemplate().save(user);  
    tran.commit();
      

  4.   

    能看到sql执行了,就说明一定是flush过了,可以检查id有没有增长,如果增长了,就说明提交过,只是因为某种情况被回滚了。
    另外看看你是不是把测试数据库和开发数据库搞混了。
      

  5.   

    我在hibernate.cfg.xml加上这句属性就可以保存了
    <property name="hibernate.connection.autocommit">true</property>
    但是为什么我的其他的工程里的hibernate.cfg.xml并没有这句话却并没有出现这个问题呢?
      

  6.   

    如果数据库开启了事务,
    要么开启Hibetnate 自动提交功能,
    要么手动提交. <session-factory >
      <property name="hibernate.connection.autocommit">true</property>....
      

  7.   

    四楼说的对:
    hibernate没有使用spring事务代理的时候,默认不是自动提交的,
    你这里需要手动的commit一下把
    Transaction tran=session.openTran.....
    getHibernateTemplate().save(user);   
    tran.commit(); 
      

  8.   

    你自己配置了事物没,如果没配置HibernateTemplate是不自动提交事物的,还有你确定你连接是你所查询的数据库?
      

  9.   

    hibernate没有使用spring事务代理的时候,默认不是自动提交的,
    你这里需要手动的commit一下把
    Transaction tran=session.openTran.....
    getHibernateTemplate().save(user);
    tran.commit(); 
    这个说了对的   你要姑SPRING配置文件要设置 自动提交的  估计你没有设置 
      

  10.   

    hibernate.cfg.xml中设置了
    <property name="hibernate.connection.autocommit">true</property>
    果然可以插入到数据库了~