直接看代码
  Session session = HibernateSessionFactory.getSession();
//Transaction tx = session.beginTransaction();
//System.out.println(session.getFlushMode());
  WapOperation wapoperation = new WapOperation();
  wapoperation.setCode(7l);
  wapoperation.setDescription("111122211");
  opdao.save(wapoperation);
//opdao.delete(wapoperation);
//tx.commit();为什么在save的时候不需要事务提交,数据就更新到数据库中了~而update和delete是需要用事务commit后才更新到数据为什么save不需要?????? 谁能给我解释下~ 有办法让save也需要事务提交后才生效吗?

解决方案 »

  1.   

    这个问题得去修改你的hibernate的配置文件。
    具体不是太记得了。楼主可以去了解下hibernate中的各个参数的含义,绝对能解决问题。太久没有用过hibernate了不太记得啦
      

  2.   

    你这个save进去的对象是游离态的。
    楼主去了解下hibernate的 cascade与inverse属性。
    解决问题后烦请告知下。本人也想知道为什么,对hibernate一直没有深入去研究过
      

  3.   

    把你hibernate配置文件和WapOperation类的配置文件贴出来看看!
      

  4.   

            <property name="dialect">
    org.hibernate.dialect.MySQLDialect
    </property>
    <property name="connection.url">
    jdbc:mysql://localhost:3306/wapzj
    </property>
    <property name="connection.username">111</property>
    <property name="connection.password">111</property>
    <property name="connection.useUnicode">true</property>
    <property name="connection.characterEncoding">UTF-8</property>
    <property name="connection.driver_class">
    com.mysql.jdbc.Driver
    </property>
    <property name="myeclipse.connection.profile">wapzj</property>
    <property name="hibernate.jdbc.batch_size">200</property>
    <property name="show_sql">true</property>
      

  5.   

    <hibernate-mapping>
        <class name="com.rifetune.wapzj.common.pojo.WapOperation" table="wap_operation" catalog="wapzj">
            <id name="code" type="java.lang.Long">
                <column name="code" />
                <generator class="identity"></generator>
            </id>
            <property name="description" type="java.lang.String">
                <column name="description" length="200" not-null="true" />
            </property>
           <set name="privilege" table="wap_priv_op" cascade="none">
                  <key column="o_code" />
                  <many-to-many class="com.rifetune.wapzj.common.pojo.WapPrivilege" column="p_code"
                  outer-join="auto"/>
            </set>
              
        </class>
    </hibernate-mapping>
      

  6.   

    你opdao.save(wapoperation);之后不加commit语句,也能在数据库中查询到新添加进的记录?
    除非你是在同一个session中,要不然不可能看到。
      

  7.   

    save(),update(),delete()方法都是要在清除session缓存的时候才执行真正的sql语句
      

  8.   

    我不相信 save 不用提交
    请问LZ你去库里看了没?
    真正保存进去了吗?
      

  9.   

    session在其他地方提交也会的,看你怎么生成的session
      

  10.   

    Hibernate自动生成的工厂类~~ 真的就是我描述的效果~
      

  11.   

    还有一个情况是  我将 tx.commit() 换成 session.flush() 进行修改删除操作时控制台打印出hql语句,数据库中也更新了记录~~ 按道理只会打印出hql但不更新数据库记录的~  谁能帮我解决啊~可以加分的~~~ 
      

  12.   

    楼主这种情况还真没见过!不知道楼主odao.save()里面是不是有提交的语句!要是没有,应该没可能,除非你用了类似spring的事务管理
      

  13.   

    要研究细节,你看hibernate的save方法怎么实现的不就行了?另外,看reference document嘛