`
zhoujinhuang
  • 浏览: 91877 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Hibernate 自动提交

阅读更多

碰到一个同事没有用@Transactional声明事务,数据库还是提交了。感觉奇怪,测试验证了一下,记录一下

代码:
    @Transactional
    public void addSe() {
        Se se = new Se();
        se.setName("test");
        commonDao.getHibernateTemplate().save(se);

        String a = null;
        a.length(); //抛异常
        Se se1 = new Se();
        se1.setName("test111");
        commonDao.getHibernateTemplate().save(se1);
    }
配置:
 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  <property name="driverClassName" value="oracle.jdbc.OracleDriver" />
  <property name="url" value="jdbc:oracle:thin:@1.1.1.1:1521:a" />
  <property name="username" value="a" />
  <property name="password" value="1" />
 </bean>

 <tx:annotation-driven transaction-manager="transactionManager" />

 <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory" ref="sessionFactory" />
  <property name="dataSource" ref="dataSource" />
 </bean>

 <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
  <property name="dataSource" ref="dataSource" />
  <property name="hibernateProperties">
   <props>
    <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
    <prop key="hibernate.show_sql">true</prop>
    <prop key="hibernate.connection.autocommit">false</prop>
    <prop key="hibernate.cache.use_second_level_cache">false</prop>
    <prop key="hibernate.cache.use_query_cache">false</prop>
   </props>
  </property>
  <property name="packagesToScan">
   <list>
    <value>cn.test</value>
   </list>
  </property>
 </bean>
 
加 @Transactional 的情况下,由于回滚,两条记录都没有写进数据库 ,即有事务并回滚
去掉@Transactional后,第一条记录入库,第二条没有入库;即两次操作不在一个事务中,但第一个操作的操作自动提交了

跟踪了一下connection的atuoCommit,刚被创建时atuoCommit为true,
如果配置了@Transactional ,org.hibernate.transaction.JDBCTransaction在事务开始时将自动提交设置为false ;
事务结束或者回滚后再设置为原始的状态。
public void begin() throws HibernateException {
  if (begun) {
   return;
  }
  if (commitFailed) {
   throw new TransactionException("cannot re-start transaction after failed commit");
  }


  log.debug("begin");

  try {
   toggleAutoCommit = jdbcContext.connection().getAutoCommit();
   if ( log.isDebugEnabled() ) {
    log.debug("current autocommit status: " + toggleAutoCommit);
   }
   if (toggleAutoCommit) {
    log.debug("disabling autocommit");
    jdbcContext.connection().setAutoCommit(false);
   }
  }
  
不过<prop key="hibernate.connection.autocommit">false</prop> 好像不起作用;
查了一下代码,hibernate.connection.autocommit在DriverManagerConnectionProvider创建连接的时候用到,
但这个执行过程没有用到DriverManagerConnectionProvider,根据配置是org.springframework.jdbc.datasource.DriverManagerDataSource完成创建连接的动作
不清楚是否还有其他地方用到了这个配置

分享到:
评论
1 楼 zongzhankui 2012-12-15  
http://www.cnblogs.com/kevin-yuan/archive/2012/09/19/2693153.html

相关推荐

    Hibernate教程26_事务并发处理

    http://blog.csdn.net/e421083458/article/details/8794127 该源码为Hibernate教程配套源码

    hibernate 教程

    提交数据库事务 9.7.3. 关闭Session 9.7.4. 处理异常 9.8. 生命周期和对象图(Lifecyles and object graphs) 9.9. 拦截器(Interceptors) 9.10. 元数据(Metadata) API 10. 事务和并行...

    Hibernate中的query 分页.doc

    然后Hibernate会自动根据所设置的数据库方言翻译成相应的SQL语句提交给数据库。比如如果数据库是Oracle,SQL Server等,则翻译为类似select ... top 10之类的SQL语句,若是MySQL,则翻译为select ... limit 10之类的...

    Hibernate实战(第2版 中文高清版)

     10.3.1 揭开自动提交的神秘面纱   10.3.2 使用Hibernate非事务地工作   10.3.3 使用JTA的可选事务   10.4 小结   第11章 实现对话   11.1 传播Hibernate Session   11.1.1 Session传播的用例   ...

    Hibernate使用技巧汇总

    session.Flush() 强制数据库立即同步,当用事务时,不必用flush,事务提交自动调用flush 在session关闭时也会调用flush &lt;br&gt;4. Hibernate总是使用对象类型作为字段类型 5. XDoclet专门建立了...

    Android数据库hibernate框架.

    查询结果对象化:对于查询结果可自动包装为实体对象,类似于hibernate框架. * 5.查询结果灵活:查询结果支持对象化,也支持结果为List,String&gt;&gt;形式,这个方法在实际项目中很实用,且效率更好些. * 6.日志较详细:因为...

    第24次课-1 Spring与Hibernate的整合

    HibernateDaoSupport提供了基于AOP事务的自动处理,程序员完全可以不用理会事务的开始与提交,它会自动完成SessionFactory的注入和事务的注入。 24.3 Spring对Hibernate的简化 24.3.5 HibernateDaoSupport ...

    java_jsp项目源码_OA办公自动化管理系统(Struts1.2+Hibernate3.0+Spring2+DWR

    OA办公自动化管理系统(Struts1.2+Hibernate3.0+Spring2+DWR)是一个基于Java EE技术的Web应用系统,旨在提高企事业单位的工作效率和管理水平。该项目采用了Struts1.2作为前端框架,Hibernate3.0作为数据库持久层...

    hibernate

    提交数据库事务 9.7.3. 关闭Session 9.7.4. 处理异常 9.8. 生命周期和对象图(Lifecyles and object graphs) 9.9. 拦截器(Interceptors) 9.10. 元数据(Metadata) API 10. 事务和并行...

    ssh框架整合step by step (springMVC + spring 5.0.4 + hibernate 5.0.12)

    # 事务的织入: 开发时不必再处理SessionFactory、Session等, 只要按配置文件指定的格式对方法进行命名, 即可自动开启/提交事务; # 做了BaseDao的简单封装, 并做了基于BaseDao的增/删/改/查/分页查询等操作的示例(并...

    ssh(structs,spring,hibernate)框架中的上传下载

     需要指定的是Spring 1.2.5提供了两套Hibernate的支持包,其中Hibernate 2相关的封装类位于org.springframework.orm.hibernate2.*包中,而Hibernate 3.0的封装类位于org.springframework.orm.hibernate3.*包中,...

    java_jsp项目源码_项目申报系统(Struts2+Spring+Hibernate++Mysql5).rar

    1. 项目申报:用户可在线提交项目基本信息、预算、进度等内容,系统自动生成项目编号,便于跟踪和管理。 2. 项目审批:具有审批权限的用户可对项目进行审批,支持多级审批,确保项目申报的合规性和准确性。 3. ...

    java_jsp项目源码_网上书城系统(Struts+Hibernate+Mysql)130222.rar

    5. 订单处理:用户在完成购书后,可以提交订单并支付相应费用,系统将自动处理订单并生成发货单。 6. 会员服务:提供积分兑换、优惠券领取等功能,增加用户粘性,提高用户满意度。 7. 后台管理:管理员可以对图书...

    健身俱乐部Web网站-JSP+Servlet+Hibernate+jQuery+Ajax

    控制转发层采用Servlet,数据访问层采用Hibernate(bean和dao是由Hibernate逆向工程自动生成)。 系统采用分层架构,由上到下分为视图层、控制转发层、业务层、服务层、数据库访问层。运用了一些基本设计模式,系统...

    java多文件上传,表单提交,直接运行

    java语言开发,使用springMVC+Hibernate+Spring,框架,多文件上传,代码可以直接运行,涉及的数据库自动创建

    jekyll-gitlab-letsencrypt:已弃用:自动对gitlab页面进行letencrypt续订

    不推荐使用 该gem使用letsencypt ACME v1 API(现已弃用)。 可能需要更改使用v2 API才能起作用。 可能不需要-gitlab现在提供...(自动)Hibernate,直到质询文件在Internet上发布为止 (自动)要求letencrypt进行验证

    NHibernate 资料集合

    Hibernate是一个目前应用的最广泛的开放源代码的对象关系映射框架,它对Java的JDBC(类似于ADO.Net)进行了非常轻量级的...你的代码仅仅和对象关联,NHibernat 自动产生SQL语句,并确保对象提交到正确的表和字段中去。

    Java版水果管理系统源码-hrSystem:struts2springhibernate实现简单员工自动管理系统

    普通员工的功能包括:系统自动完成普通员工每天上下班的考勤记录,员工可以查看工资及3天内的考勤打卡情况 如果发现考勤与实际不符,可以提交申请给经理处理。 经理继承员工的功能,不同之处在于:能增加员工,审核...

    mycat多租户解决方案二

    mycat多租户解决方案 此方案有几个关键点: ...当Service的某个事务托管的业务方法被调用时,Hibernate自动完成数据库连接的建立或重用过程,当此方法结束时,自动回收数据库连接以及提交事务。在这里,操作数......

    蝙蝠在线考试系统 v2.2.6.rar

    前台用户可以直接参加考试,根据后台设置自动生成试卷,考试页面倒计时,时间到自动提交试卷,前台用户还可以查询考试成绩和试卷的详细得分情况及试题解析;管理员还可以发布各类公告信息或设置讨论区,公告信息可由...

Global site tag (gtag.js) - Google Analytics