hibernate中connection操作

  最近要在一个用jdbc的项目基础上用起hibernate框架,但是之前的代码太多,心想干脆就保持jdbc的访问方式吧。好在session能通过connection()方法得到Connection实例。

  不过后来项目跑起来却发现通过hibernate得到的connection实例不能更新数据库数据。。。不得已查了N多资料,最后查了下jdk帮助文档才知道Connection接口有个setAutoCommit(boolean)方法,用来设置Connection对象的自动提交模式,在传统的jdbc中,getAutoCommit()都为true,即默认是自动提交。

  在hibernate中,为了实现session的一级缓存以及hibernate的事务管理,而将每个session下封装的connection都setAutoCommit(false)了。所以直接通过session获得的connection实例默认不是自动提交的,因此才会出现无法更新数据库的现象。setAutoCommit(true)后就OK了。

  下面是JDK帮助文档里关于setAutoCommit(boolean)方法的描述:

setAutoCommit

void setAutoCommit(boolean autoCommit)
                   throws SQLException
将此连接的自动提交模式设置为给定状态。如果连接处于自动提交模式下,则它的所有 SQL 语句将被执行并作为单个事务提交。否则,它的 SQL 语句将聚集到事务中,直到调用 commit 方法或 rollback 方法为止。默认情况下,新连接处于自动提交模式。

提交发生在语句完成时。语句完成的时间取决于 SQL 语句的类型:

  • 对于 DML 语句(比如 Insert、Update 或 Delete)和 DDL 语句,语句在执行完毕时完成。
  • 对于 Select 语句,语句在关联结果集关闭时完成。
  • 对于 CallableStatement 对象或者返回多个结果的语句,语句在所有关联结果集关闭并且已获得所有更新计数和输出参数时完成。

注:如果在事务和自动提交模式更改期间调用此方法,则提交该事务。如果调用 setAutoCommit 而自动提交模式未更改,则该调用无操作(no-op)。

参数:
autoCommit - 为 true 表示启用自动提交模式;为 false 表示禁用自动提交模式
抛出:
SQLException - 如果发生数据库访问错误,在参与分布式事务的同时调用 setAutoCommit(true),或者在关闭的连接上调用此方法
另请参见:
getAutoCommit()

转载于:https://www.cnblogs.com/wu8685/archive/2011/04/29/2033089.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值