hibernate并发时的事务处理
两个方法
方法一:
    public void saveTest() {
        try {
            System.out.println("saveTest start");
            User user = entityDao.get(User.class, 1L);
//            User user = entityDao.getTemplate().get(User.class, 1L, LockMode.READ);
            System.out.println("saveTest " + user.getMail());
            try {
                Thread.sleep(10000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            user.setMail("test@qq.com");
            entityDao.getTemplate().saveOrUpdate(user);
            System.out.println("saveTest " + user.getMail());
            System.out.println("saveTest end");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
方法二:
public void saveTest2() {
        try {
            System.out.println("saveTest2 start");
            User user = entityDao.get(User.class, 1L);
//            User user = entityDao.getTemplate().get(User.class, 1L, LockMode.READ);
            System.out.println("saveTest2 " + user.getMail());
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            user.setMail("test2@qq.com");
            entityDao.getTemplate().saveOrUpdate(user);
            System.out.println("saveTest2 " + user.getMail());
            System.out.println("saveTest2 end");
        } catch (Exception e) {
            e.printStackTrace();
        }
声明式事务的弊端。事务会自动提交。无法有效对不同线程的事务进行阻塞。方法1中先查询出结果,但是保存在后,期间方法二做出查询和保存操作。这样两个线程独立操作互不影响。有个比较奇葩的现象:如果方法一种的查询出的结果和set方法设置的结果一致。那么hibernate不对发送update语句。及时此时数据库的实际数据已经发生变化,对hibernate而言。它并不知道。所以他做出的判断是:如果set前后的值相同,将不会发送sql。
搜集资料时看到有人提出。并发量较高时使用Queue来作为一个缓冲池,集中进行插入更新操作,感觉是个不错的想法。只是如果做了负载均衡呢?
hibernate并发时的事务处理的更多相关文章
- ecshop 秒杀并发时库存会被减到小于0的解决办法
		ecshop 秒杀并发时库存会被减到小于0更新库存后,再进行库存检查,如果库存为负数,则执行事务的回滚. begin();//开始一个事物处理开始 $sql = "UPDATE " ... 
- 关于sphinx+PHP在高并发时响应性能低下的解决办法
		经过多次压力测试,发现sphinx在高并发时出现负载突然提升,并且响应速度明显下降.经过多方面的排查,发现是由于PHP与sphinx自带的 searchd进行socket的连接之后,系统内存有大量的T ... 
- FluorineFx 播放FLV 时堆棧溢出解决 FluorineFx NetStream.play 并发时,无法全部连接成功的解决办法
		http://25swf.blogbus.com/tag/FluorineFx/ http://www.doc88.com/p-7002019966618.html 基于Red5的视频监控系统的研究 ... 
- Hibernate 注解时 hibernate.hbm.xml的配置方法 以及与SSH整合里的配置方式
		①纯Hibernate开发: 当你在Bean中写入注解后,需要告诉hibernate哪些类使用了注解. 方法是在hibernate.hbm.xml文件中配置 <!DOCTYPE hibernat ... 
- [转]你如何面对—LNMP高并发时502
		From : http://www.topthink.com/topic/5683.html 之前php-fpm配置: 单个php-fpm实例,使用socket方式,内存8G 静态方式,启动php-f ... 
- j2ee高并发时使用全局变量需要注意的问题
		原文:https://blog.csdn.net/jston_learn/article/details/21617311 开发中,全局变量的使用很频繁,但对于多线程的访问,使用全局变量需要注意的地方 ... 
- Mysql并发时经典常见的死锁原因及解决方法
		1. mysql都有什么锁 MySQL有三种锁的级别:页级.表级.行级. 表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发生锁冲突的概率最高,并发度最低. 行级锁:开销大,加锁慢:会出现死锁 ... 
- ConcurrentHashMap是如何提高并发时的吞吐性能
		为并发吞吐性能所做的优化 ConcurrentHashMap使用了一些技巧来获取高的并发性能,同时避免了锁.这些技巧包括: 为不同的Hash bucket(所谓hash bucket即不同范围的key ... 
- qt容器在并发时需要注意的地方
		最近用tbb和qt写了一个延时摄影后期控制镜头的工具,主要就是扫描目录下所有图片,按照给定参数截取图片中某区域并另存,模拟镜头摆动. 扫描后的图片路径保存在qlist内,作为只读数据,交由tbb的pa ... 
随机推荐
- 构造和改变一个string的其他方法
			构造一个string的其他方法: 1string s1(cp, n),cp为c风格数组名或一个指向C风格数组的指针,则执行的操作为拷贝从cp开始包括cp在内的接下来n个字符给s1,n的默认值为size ... 
- AM335X的SD卡更新系统学习记录
			一般利用一张SD卡就能进行系统的更新,以前一直不知是什么原理,最近了解了下,对了解到的内容做个记录.使用的是AM335X平台,系统是Linux,文件系统是EXT3: 1.首先需要一张分好分区的SD卡( ... 
- 关于真机测试root权限问题
			普通用户好像也无伤大雅: 输入后看到这样的有个美元符号,说明你的虚拟机获取不了权限,有权限的应该是root和#都有,这个时候你输入su 如果还是没有变化,看看你的虚拟机是不是android7.0,An ... 
- django--关于部署scrapyd项目报错问题
			首先在同步两篇之前写过的博客,可能能用得到 1.https://www.cnblogs.com/lutt/p/10893192.html2.https://www.cnblogs.com/lutt/p ... 
- 关于Win32串口
			因为近段时间接触Hid相对来说多一些,由此忽略了串口中获取cbInQue这个重要的东西,下面是错误代码 // Win32SerialPortLib.cpp : 定义 DLL 应用程序的导出函数. // ... 
- winform学习(7)Label控件、Button控件、TextBox控件
			Label控件是System.Windows.Forms.Label 类提供的控件. 作用:主要用来提供其他控件的描述文字,例如:登录窗体上的用户名.密码(输入框前面的字) Button控件是Syst ... 
- ASP学习笔记1
			一.变量 1.1 声明变量 dim name name="Donald Duck" response.write("My name is: " & na ... 
- docker镜像 - 下载、创建镜像和导入导出镜像
			实验环境 CentOS 7.5 安装并启动docker yum install -y docker systemctl start docker 镜像 安装镜像 docker pull [OPTION ... 
- 第二十四篇 玩转数据结构——队列(Queue)
			1.. 队列基础 队列也是一种线性结构: 相比数组,队列所对应的操作数是队列的子集: 队列只允许从一端(队尾)添加元素,从另一端(队首)取出元素: 队列的形象化描述如下图: 队列是一种先进 ... 
- Duizi and Shunzi HDU
			Duizi and Shunzi Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ... 
