背景: 添加事务与否都不影响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查询事务必要性的更多相关文章

  1. hibernate查询方式

    hibernate查询方式:1.本地SQL查询 2.HQL查询 3.QBC查询 HQL查询:是面向对象的查询语言,是使用最广的一种查询方法 QBC查询:Query by Criteria是一套接口来实 ...

  2. (十)Hibernate 查询方式

     所有项目导入对应的hibernate的jar包.mysql的jar包和添加每次都需要用到的HibernateUtil.java 第一节:Hibernate 查询方式简介 1,导航对象图查询方式: 2 ...

  3. Hibernate查询、连接池、二级缓存

    Hibernate第三天: 1. 对象状态 2. session缓存 3. lazy懒加载 4. 映射 一对一对映射 组件/继承映射 目标: 一.hibernate查询 二.hibernate对连接池 ...

  4. Hibernate中事务小案例

    理论知识: 什么是事务? 指作为单个逻辑工作单位执行的一系列操作,要么完全的执行,要么完全不执行.事务处理可以确保非事务性单元内的所有操作都完全完成,否则永久不会更新面向数据的资源.通过将一组操作组合 ...

  5. (转载)Hibernate的事务管理

    Hibernate的事务管理 事务(Transaction)是工作中的基本逻辑单位,可以用于确保数据库能够被正确修改,避免数据只修改了一部分而导致数据不完整,或者在修改时受到用户干扰.作为一名软件设计 ...

  6. Hibernate学习笔记(三)—— Hibernate的事务控制

    Hibernate是对JDBC的轻量级封装,其主要功能是操作数据库.在操作数据库过程中,经常会遇到事务处理的问题,接下来就来介绍Hibernate中的事务管理. 在学习Hibernate中的事务处理之 ...

  7. Hibernate的事务管理

    Hibernate的事务管理 事务(Transaction)是工作中的基本逻辑单位,可以用于确保数据库能够被正确修改,避免数据只修改了一部分而导致数据不完整,或者在修改时受到用户干扰.作为一名软件设计 ...

  8. Hibernate中事务的隔离级别设置

    Hibernate中事务的隔离级别,如下方法分别为1/2/4/8. 在Hibernate配置文件中设置,设置代码如下

  9. Hibernate查询

    HIbernate查询 使用get方法 使用get方法通过持久类名和ID号查找一个对象Stu instance = (Stu) getsession() .get("com.lovo.po. ...

随机推荐

  1. WebBrowser使用详解

    编号:1007时间:2016年4月29日14:53:45功能:WebBrowser使用详解URl:http://blog.sina.com.cn/s/blog_3d7bed6501000c8n.htm ...

  2. C语言字符串声明

    重新学习C语言字符串声明char *a="nihao";char a[]="nihao";什么区别?前者定义的是指针,并且指向字符串常量“nihao”,后者是字 ...

  3. jsb里出现的 Invalid Native Object的一次bug修复的思考

    Cocos2d: jsb: ERROR: File /Users/dcx_JD/Documents/cocos2d-x-2.2.2/scripting/javascript/bindings/gene ...

  4. PAT (Basic Level) Practise:1006. 换个格式输出整数

    [题目链接] 让我们用字母B来表示“百”.字母S表示“十”,用“12...n”来表示个位数字n(<10),换个格式来输出任一个不超过3位的正整数.例如234应该被输出为BBSSS1234,因为它 ...

  5. 【转】apache与tomcat的区别

    Apache 和 Tomcat 都是web网络服务器,两者既有联系又有区别,在进行HTML.PHP.JSP.Perl等开发过程中,需要准确掌握其各自特点,选择最佳的服务器配置. Apache是web服 ...

  6. hdu 5206 Four Inages Strategy

    题目大意: 判断空间上4个点是否形成一个正方形 分析: 标称思想 : 在p2,p3,p4中枚举两个点作为p1的邻点,不妨设为pi,pj,然后判断p1pi与p1pj是否相等.互相垂直,然后由向量法,最后 ...

  7. 2016 ACM/ICPC Asia Regional Dalian Online 1006 /HDU 5873

    Football Games Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)To ...

  8. 记录几种有关libsvm格式数据的list和dict用法

    # list元素求和 sum = reduce(lambda x,y: x+y, mylist) # 比较两个 lists 的元素是否完全一致 if all(x==y for x, y in zip( ...

  9. c 深度剖析 3

    1 typedef 和 define 的区别 #define是简单的替换;    typedef是别名! 1 2 #define pchar char * pchar a,b;//展开后 char * ...

  10. spring mvc 重定向传参

    参考链接如下: http://bbs.csdn.net/topics/391034118?page=1 自己的示例程序: 详细页面提交一个修改动作,修改完成后跳转到检索页面,把检索条件重新赋值给检索页 ...