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 ...
随机推荐
- Python调用libsvm
# -*- coding: utf-8 -*- import os, sys path = r"D:\Program Files (x86)\libsvm-3.22\python" ...
- 训练20191005 2017-2018 ACM-ICPC Asia East Continent League Final
A 签到 M 签到 K 读懂后签到 L 博弈论 [引理]出现SXXS结构时后手必胜. 很容易发现n为奇数时后手不可能胜利,n为偶数时先手不可能胜利.n≤6时一定平局,n≥7时先手有可能胜利,n≥16时 ...
- linux连接oracle数据
//切换到oracle用户模式下 su - oracle //登录sqlplus sqlplus /nolog //连接orcale conn xx/xx;(用户名/密码) 或者 connect / ...
- php核心技术与最佳实践--- oop
<?php /** * Created by PhpStorm. * User: cl * Date: 2019/8/12 * Time: 7:08 */ /*oop*/ class Perso ...
- Python3标准库:string通用字符串操作
1. string:通用字符串操作 string模块在很早的Python版本中就有了.以前这个模块中提供的很多函数已经移植为str对象的方法,不过这个模块仍保留了很多有用的常量和类来处理str对象. ...
- 松软科技课堂:jQuery 语法
jQuery 语法 jQuery 语法是为 HTML 元素的选取编制的,可以对元素执行某些操作. 基础语法是:$(selector).action() 美元符号定义 jQuery 选择符(select ...
- C++的多态总结(静态&动态)
什么是多态 顾名思义就是同一个事物在不同场景下的多种形态. 静态多态 我们以前说过的函数重载就是一个简单的静态多态,静态多态是编译器在编译期间完成的,编译器会根据实参类型来选择调用合适的函数,如果有合 ...
- 什么是类的hashcode值
1.要知道什么是类的hashcode值,首要要了解什么是hash(哈希).Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换 ...
- xampp 软件端口占用
参考链接: https://jingyan.baidu.com/album/48b558e3ede7747f39c09a55.html?picindex=1 查看端口占用情况 参考资料: https: ...
- 哥廷根: Heroes in My Heart
哥廷根: Heroes in My Heart (本篇的文字部分均出自北大未名BBS的连载 Heroes in my heart 中哥廷根的部分,作者 ukim. 话说,有任何人能够联系上 ukim ...