Hibernate与autoCommi
来源:互联网 发布:作图软件cs 编辑:程序博客网 时间:2024/06/01 19:17
JDBC 的autoCommit
属性
对于每一个 JDBC connection,都有一个autoCommit属性,只有执行commit后,该connection中的操作(statement操作)才会在数据库中真正执行。所以若是 JDBC connection的autoCommit属性是false,且sql语句中没有显示commit,则sql语句即使被发送到数据库中,但因为没有commit,实际上也没有真正执行。若是connection的autoCommit为true,那么每一条发送到数据中的sql,会自动commit,即会自动执行。也就是说:commit才会真正的导致sql语句执行。数据库默认是自动提交的,即数据库默认的的autoCommit属性是true。
Hibernate 的hibernate.connection.autocommit
属性
Hibernate中hibernate.connection.autocommit属性用来设置获取到的 JDBC connection的autoCommit属性。hibernate.cfg.xml中默认是false。session.connection().getAutoCommit()方法可以获取session对应的connection的autoCommit属性。
Hibernate 的session.beginTransaction()
方法
session.beginTransaction()方法会将session对应的connection的autoCommit属性设为false,autoCommit=false(相当于connection 的start transaction)就是指开启jdbc的事务。所以session.beginTransaction()后一定要有:transaction.commit(),不然刷到数据库中的所有sql执行语句都没有commit,也就不会执行。
Hibernate 的session.flush()
方法
清理session缓存;先由save()等代码中指定的操作生成对应的sql语句,可能有多条sql语句,再将session中的sql语句发送到数据库执行。若是在生成sql语句时抛错,即使生成其它sql语句时正确,也不会生成任何sql语句,也即不会有任何的sql发送到数据库中去执行。transaction.commit()和session.close()操作都已经有flush()的操作,所以commit或close后就不用flush。
参考文章
- https://forum.hibernate.org/viewtopic.php?f=1&t=944848
- Hibernate与autoCommi
- Native Hibernate与Hibernate JPA
- Native Hibernate与Hibernate JPA
- Hibernate与JDO肩并肩
- Hibernate与JDO肩并肩
- xdoclet 与 hibernate
- Hibernate、iBATIS 与 BLOB
- Hibernate、iBATIS 与 BLOB
- Hibernate 与 Struts 框架
- Hibernate特点与思考
- Hibernate与Lucene集成
- Hibernate、iBATIS 与 BLOB
- hibernate 查询与连接
- XDoclet 与Hibernate 映射
- hibernate与Access
- hibernate与应用缓存
- Hibernate VO 与 PO
- Hibernate与Ibatis
- reduceByKey和groupByKey区别与用法
- 关于Android的Context的使用和注意,防止内存泄漏和异常
- python_lintcode_47主元素_47主元素 II_48主元素 III
- 数组模拟链表之学生排队
- 写了个Python脚本 帮助更新Android工程里面的gradle, android和依赖版本
- Hibernate与autoCommi
- poj-1182-食物链(并查集)
- 海康SDK java调用中遇到的问题
- 机器学习之路,你可能需要用到的...
- MySQL常用的四种引擎的介绍
- 数据结构 树 哈夫曼树及编码 C语言版
- 今日头条实习面试总结(1)
- 【Data_Structure笔记8】排序算法之【选择排序---堆排序】
- UE4学习笔记21th:创建菜单控件蓝图