求指导,hibernate事务不起作用
求指点,hibernate事务不起作用
恳请指点!
简单的hibernate事务往数据库存数据,但是save()后(事务未commit之前)数据库就已经有数据,出现异常后事务也不回滚,mysql数据库,数据库事务隔离级别默认:不可重复读
保存User方法
保存Log方法
hibernate配置文件
运行时手动制造的异常会抛出,rollback()也会执行,但是事务却没回滚。
恳请指点!
------解决方案--------------------
你MySQL建表的时候,选择的是什么类型的表?MySQL不是所有表类型都支持事务的。
建议你使用: InnoDB
------解决方案--------------------
本身是没有问题的,
楼主加上finally {session.close();}
试一下,session关闭一下。
恳请指点!
简单的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关闭一下。