两个方法

方法一:
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并发时的事务处理的更多相关文章

  1. ecshop 秒杀并发时库存会被减到小于0的解决办法

    ecshop 秒杀并发时库存会被减到小于0更新库存后,再进行库存检查,如果库存为负数,则执行事务的回滚. begin();//开始一个事物处理开始 $sql = "UPDATE " ...

  2. 关于sphinx+PHP在高并发时响应性能低下的解决办法

    经过多次压力测试,发现sphinx在高并发时出现负载突然提升,并且响应速度明显下降.经过多方面的排查,发现是由于PHP与sphinx自带的 searchd进行socket的连接之后,系统内存有大量的T ...

  3. FluorineFx 播放FLV 时堆棧溢出解决 FluorineFx NetStream.play 并发时,无法全部连接成功的解决办法

    http://25swf.blogbus.com/tag/FluorineFx/ http://www.doc88.com/p-7002019966618.html  基于Red5的视频监控系统的研究 ...

  4. Hibernate 注解时 hibernate.hbm.xml的配置方法 以及与SSH整合里的配置方式

    ①纯Hibernate开发: 当你在Bean中写入注解后,需要告诉hibernate哪些类使用了注解. 方法是在hibernate.hbm.xml文件中配置 <!DOCTYPE hibernat ...

  5. [转]你如何面对—LNMP高并发时502

    From : http://www.topthink.com/topic/5683.html 之前php-fpm配置: 单个php-fpm实例,使用socket方式,内存8G 静态方式,启动php-f ...

  6. j2ee高并发时使用全局变量需要注意的问题

    原文:https://blog.csdn.net/jston_learn/article/details/21617311 开发中,全局变量的使用很频繁,但对于多线程的访问,使用全局变量需要注意的地方 ...

  7. Mysql并发时经典常见的死锁原因及解决方法

    1.    mysql都有什么锁 MySQL有三种锁的级别:页级.表级.行级. 表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发生锁冲突的概率最高,并发度最低. 行级锁:开销大,加锁慢:会出现死锁 ...

  8. ConcurrentHashMap是如何提高并发时的吞吐性能

    为并发吞吐性能所做的优化 ConcurrentHashMap使用了一些技巧来获取高的并发性能,同时避免了锁.这些技巧包括: 为不同的Hash bucket(所谓hash bucket即不同范围的key ...

  9. qt容器在并发时需要注意的地方

    最近用tbb和qt写了一个延时摄影后期控制镜头的工具,主要就是扫描目录下所有图片,按照给定参数截取图片中某区域并另存,模拟镜头摆动. 扫描后的图片路径保存在qlist内,作为只读数据,交由tbb的pa ...

随机推荐

  1. soundtouch 变速算法matlab实现

    soundtouch变速主要采用WSOLA算法来进行变速. http://www.surina.net/soundtouch/ https://blog.csdn.net/suhetao/articl ...

  2. Centos7添加软链接

    1.pycharm添加软连接: 命令行模式中输入命令: ln -s /root/pycharm-2018.1/bin/pycharm.sh /usr/bin/pycharm ps:代码中/root/p ...

  3. codeblocks汉化

    1.- 汉化包 腾讯微云 2.首先打开codeblocks安装文件夹,如:D:\CodeBlocks\share\CodeBlocks\locale\zh_CN,注意:zh_CN文件夹需自行创建 3. ...

  4. 第四十篇 入门机器学习——Numpy.array的基本操作——向量及矩阵的运算

    No.1. Numpy.array相较于Python原生List的性能优势 No.2. 将向量或矩阵中的每个元素 + 1 No.2. 将向量或矩阵中的所有元素 - 1 No.3. 将向量或矩阵中的所有 ...

  5. TCP/IP协议-为什么说TCP是可靠连接

    我们平常经常说UDP是不可靠连接,TCP是可靠连接,然而TCP为什么是可靠的呢 1. TCP和UDP的优缺点TCP 缺点: [1] 三次握手四次挥手,传输更多包,浪费一些带宽[2] 为了进行可靠通信, ...

  6. AcWing 794. 高精度除法

    https://www.acwing.com/problem/content/796/ #include<bits/stdc++.h> using namespace std; // A/ ...

  7. Rumor

    Vova promised himself that he would never play computer games... But recently Firestorm — a well-kno ...

  8. qt5.9.0 msvc2015优雅的崩溃:dumpfile

    交给客户的软件奔溃了怎么办? 我们不能再客户电脑上安装vs,也不想傻傻的用log来猜测出错的地方. 利用Dbghelp可以解决这一问题. 首先是vs生成release版本的时候需要同时生成pdb文件, ...

  9. eclipse中spring配置文件的自动提示和namespace的添加

    在用spring或者springmvc框架进行开发时,编辑applicationcontext.xml等配置文件是必不可少的,在eclipse中打开applicationcontext.xml通常是这 ...

  10. luckyframe的一些坑

    建议使用idea运行 1.第一次运行访问http://localhost:8088/LuckyFrameServer 2.luckyframe提示“javax.net.ssl.SSLKeyExcept ...