[摘]Hibernate查询事务必要性
背景: 添加事务与否都不影响Hibernate的查询操作。
问题: 查询操作是否有必要添加事务?
答案1: Hibernate官方手册上建议任何操作(增删改查)都需要添加事务.
答案2: robbin意见:不添加事务 http://www.iteye.com/topic/1603
我认为不需要加事务。其实Hibernate的Transaction就是JDBC Transaction而已,而实际上Hibernate并没有在Transaction上面附加关于PO的状态管理,因此你先问问你自己,假设你不用Hibernate,你只用JDBC写程序,你会在发送一次SQL Select之后进行conn.commit()吗?如果答案不是,那么你一样在Hibernate中不需要加Transaction,事实上我是从来不加的。而且由于数据库CRUD操作90%以上的都是只读的查询,因此如果你给只读查询加上事务控制,经过我的测试证明,速度会有稍微的降低,而数据库的CPU占用率会有明显的上升。
使用Transaction确实对性能降低不多,但是会非常明显增加数据库的CPU负载。启动不启动事务和数据库是否命中Cache没有什么关系。只要你提交commit,数据库是一定会提交事务的。而我们知道事务控制即使在数据库端也是比较复杂的。我的理解是对读查询提交事务也许可以保证数据的一致性。例如在多线程频繁读写一块数据的时候,也许就在你select出来的过程中,数据已经被其他写操作修改了。总之,除非那种对实时数据的精确性要求非常的环境,否则我是绝对不会对读查询使用Transaction的。
答案3 单条查询不需要,多条查询需要只读事务
http://www.blogjava.net/terry-zj/archive/2005/12/06/22792.html
如果你一次执行单条查询语句,则没有必要启用事务支持,数据库默认支持SQL执行期间的读一致性;
如果你一次执行多条查询语句,例如统计查询,报表查询,在这种场景下,多条查询SQL必须保证整体的读一致性,否则,在前条SQL查询之后,后条SQL查询之前,数据被其他用户改变,则该次整体的统计查询将会出现读数据不一致的状态,此时,应该启用事务支持。
其他: 具体数据库需要加,如DB2.
在用到查询引起的数据库触发器时有需要事务.
[摘]Hibernate查询事务必要性的更多相关文章
- hibernate查询方式
hibernate查询方式:1.本地SQL查询 2.HQL查询 3.QBC查询 HQL查询:是面向对象的查询语言,是使用最广的一种查询方法 QBC查询:Query by Criteria是一套接口来实 ...
- (十)Hibernate 查询方式
所有项目导入对应的hibernate的jar包.mysql的jar包和添加每次都需要用到的HibernateUtil.java 第一节:Hibernate 查询方式简介 1,导航对象图查询方式: 2 ...
- Hibernate查询、连接池、二级缓存
Hibernate第三天: 1. 对象状态 2. session缓存 3. lazy懒加载 4. 映射 一对一对映射 组件/继承映射 目标: 一.hibernate查询 二.hibernate对连接池 ...
- Hibernate中事务小案例
理论知识: 什么是事务? 指作为单个逻辑工作单位执行的一系列操作,要么完全的执行,要么完全不执行.事务处理可以确保非事务性单元内的所有操作都完全完成,否则永久不会更新面向数据的资源.通过将一组操作组合 ...
- (转载)Hibernate的事务管理
Hibernate的事务管理 事务(Transaction)是工作中的基本逻辑单位,可以用于确保数据库能够被正确修改,避免数据只修改了一部分而导致数据不完整,或者在修改时受到用户干扰.作为一名软件设计 ...
- Hibernate学习笔记(三)—— Hibernate的事务控制
Hibernate是对JDBC的轻量级封装,其主要功能是操作数据库.在操作数据库过程中,经常会遇到事务处理的问题,接下来就来介绍Hibernate中的事务管理. 在学习Hibernate中的事务处理之 ...
- Hibernate的事务管理
Hibernate的事务管理 事务(Transaction)是工作中的基本逻辑单位,可以用于确保数据库能够被正确修改,避免数据只修改了一部分而导致数据不完整,或者在修改时受到用户干扰.作为一名软件设计 ...
- Hibernate中事务的隔离级别设置
Hibernate中事务的隔离级别,如下方法分别为1/2/4/8. 在Hibernate配置文件中设置,设置代码如下
- Hibernate查询
HIbernate查询 使用get方法 使用get方法通过持久类名和ID号查找一个对象Stu instance = (Stu) getsession() .get("com.lovo.po. ...
随机推荐
- E - 今年暑假不AC
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Des ...
- gitlab The repository for this project is empty
/***************************************************************************** * gitlab The reposito ...
- 对UICollectionView的学习
UICollectionView 和 UICollectionViewController 类是iOS6 新引进的API,用于展示集合视图,布局更加灵活,可实现多列布局,用法类似于UITableVie ...
- php 函数积累
array_slice()<?php $a=array("red","green","blue","yellow" ...
- PHP浮点型
<?php$num_float1 = 1.234; //小数点echo $num_float1;echo "<br />";$num_float2 = 1. ...
- 为什么说Parcelable 比Serializable更高效
本文转载自:http://blog.csdn.net/androidzhaoxiaogang/article/details/8172539 什么是序列化,实现序列化的目的是什么? 讨论这个问题之前, ...
- javascript输出图的简单路径
<script> //图的构建 function vnode() { this.visited=0; this.vertex=0; this.arcs=new Array(); } fun ...
- Sklearn库例子2:分类——线性回归分类(Line Regression )例子
线性回归:通过拟合线性模型的回归系数W =(w_1,…,w_p)来减少数据中观察到的结果和实际结果之间的残差平方和,并通过线性逼近进行预测. 从数学上讲,它解决了下面这个形式的问题: Lin ...
- JS之变量的运算
js变量的特点: 1.区分大小写,这是与html及css最大的不同: 2.弱变量.通过var进行定义,无明确的数据类型. 第一部分 字符型 对于字符型的数据,常用的操作为字符的转换.字符的操作 1.字 ...
- linux 安装phpMyAdmin
1. 首先安装 php mysql nginx 2. 下载phpMyadmin wget http://sourceforge.net/projects/phpmyadmin/files/phpM ...