场景:把从客户端提交的任务放到线程池执行

异常:HibernateException: Could not obtain transaction-synchronized Session for current thread

猜测:

  根据关键词猜测可能的原因:

     transaction、synchronized、session、current thread

  由于这个操作是在Service中做的,又提到了事物、会话、当前线程,所以定位代码,发现是执行ADD操作报错

  这块代码之前没有问题,在加了线程池执行后就报错了

  由于service中默认是单实例的,所以下一步猜测:线程池的线程和客户端来的线程在执行数据库操作时有什么区别,

结论:

  搜索了一些资料,对hibernate操作数据库有了一定的了解。

  hibernate要对数据库操作必须有一个session,这个session不是http中的session,但概念类似。

  正常执行add的请求(thread)中都会在ThreadLocal中存储sesssion,但由于线程池中的线程是我们创建出的,所以没有这个session

解决方案:

  没有session,给个session就好了。

  需要注意的就是判断当前线程有没有session

  TransactionSynchronizationManager.isSynchronizationActive()这个方法可以判断,true代表当前现场有session

  另外session用完需要关闭

最新文章

  1. MYSQL数据库的优化
  2. c#网络编程
  3. Orchard源码分析(4.4):Orchard.Caching.CacheModule类
  4. 7.js模式-装饰者模式
  5. HTML和JSON的数据交互-HTML模板
  6. document.compatMode(判断当前浏览器采用的渲染方式)
  7. android EncodingUtils
  8. CCNP路由实验(2) -- OSPF
  9. VMware vSphere 服务器虚拟化之二十二桌面虚拟化之创建View Composer链接克隆的虚拟桌面池
  10. NoSQL数据建模技术
  11. iOS 应用提交到iTunes Connect,显示"正在处理"后消失不见
  12. 【Swift 4.0】iOS 11 UICollectionView 长按拖拽删除崩溃的问题
  13. TopCoder Div2
  14. [Linux][Mac]如何使用SSH登陆远程Linux服务器&使用SCP下载远程终端文件
  15. 声明父类new子类
  16. 【English】主语从句的引导词是如何选择?
  17. python中的find、rfind、index、rindex
  18. 设计一个 Java 程序,自定义异常类,从命令行(键盘)输入一个字符串,如果该字符串值为“XYZ”。。。
  19. 使用jstl报错:Can not find the tag library descriptor for “http://java.sun.com/jstl/core”
  20. OpenUDID 实现UDID替代

热门文章

  1. 云计算之路-出海记:整一台 aws 免费云服务器
  2. Hadoop调优 | NameNode主备宕机引发的思考
  3. Git操作:远程仓库(git remote)的添加、管理和删除
  4. 数字取证autopsy系列——保存证据镜像(一)
  5. 淘宝客?CPS技术是怎么实现的?
  6. Redis下载
  7. 适用初学者的5种Python数据输入技术
  8. gcc编译链接用到的环境变量
  9. grep/字符/次数匹配/锚定符/小大括号/wc/tr/cut/sort/uniq
  10. iscsi客户端常用操作