当前位置: 代码迷 >> Java Web开发 >> 求指导,hibernate事务不起作用
  详细解决方案

求指导,hibernate事务不起作用

热度:6610   发布时间:2013-02-25 21:14:11.0
求指点,hibernate事务不起作用
恳请指点!
简单的hibernate事务往数据库存数据,但是save()后(事务未commit之前)数据库就已经有数据,出现异常后事务也不回滚,mysql数据库,数据库事务隔离级别默认:不可重复读
保存User方法
Java code
        @Override    public void addUser(User user) {                Session session = null;        Transaction trans = null;        try {            session = HibernateUtil.getSessionFactory().getCurrentSession();            trans = session.beginTransaction();            //保存用户            session.save(user);            //制造异常            System.out.println(1/0);            //记录日志            LogMgr logMgr = new LogMgrImpl();            Log log = new Log();            log.setOperationTime(new Date());            log.setDetail("保存用户");            log.setUserName(user.getName());                        logMgr.addLog(log);            trans.commit();        } catch (Exception e) {            e.printStackTrace();            trans.rollback();            // TODO: handle exception        }            }

保存Log方法
Java code
@Override    public void addLog(Log log) {                HibernateUtil.getSessionFactory().getCurrentSession().save(log);            }


hibernate配置文件
XML code
<session-factory>        <property name="hibernate.dialect">            org.hibernate.dialect.MySQLDialect        </property>        <property name="hibernate.connection.url">            jdbc:mysql://localhost/SSH2?characterEncoding=UTF-8        </property>        <property name="hibernate.connection.username">root</property>        <property name="hibernate.connection.password">admin</property>        <property name="hibernate.connection.driver_class">            com.mysql.jdbc.Driver        </property>        <property name="hibernate.show_sql">true</property>        <property name="hibernate.hbm2ddl.auto">update</property>        <property name="hibernate.current_session_context_class">thread</property>                <mapping resource="com/spg/bean/User.hbm.xml" />        <mapping resource="com/spg/bean/Log.hbm.xml" />    </session-factory>

运行时手动制造的异常会抛出,rollback()也会执行,但是事务却没回滚。
恳请指点!

------解决方案--------------------------------------------------------
你MySQL建表的时候,选择的是什么类型的表?MySQL不是所有表类型都支持事务的。

建议你使用: InnoDB
------解决方案--------------------------------------------------------
本身是没有问题的,
楼主加上finally {session.close();}
试一下,session关闭一下。
  相关解决方案