开发中的小囧事(2)——做查询操作时会打印一堆update 语句,连续提交查询导致数据库等待锁

本文探讨了在使用Hibernate进行数据库操作时,由于快速提交查询请求导致的数据库锁问题,详细解释了问题产生的原因,包括setter方法误操作、Spring MVC单例模式影响以及可能的Hibernate连接池异常问题。提供了对解决此并发问题的深入思考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:小囧事(1)中做查询时hibernate智能的做了update,此时多次快速的提交查询请求时导致数据库短暂的等待锁,当无限制的快速提交N次之后,Hibernate报数据库连接异常(不能从池中获得一个连接)。
问题思考:提交查询请求时候由于setter方法的问题导致Hibernate自动update,而update相对来说还是比较慢的,再还没有update结束的时候多次提交了请求,这样就会导致前一次update还未来得及提交事物而又一次update又来了,如此恶性循环最终导致每一次的update都锁着数据库。当过一段时间不再提交的时候程序会往后执行到commit,若有一个update被提交并解锁,则相应的等待锁都会一一解锁。等待锁的另一个原因可能是使用spring mvc是单例,所有请求都只有一个Controller,所以造成前一次请求未完成而又来一次请求时程序不能继续执行到事物提交那一步。若struts2.0可能不会出现这样的问题。
至于hibernate报连接池异常暂时还没想好。

NND,这个bug还蛮严重的。不小心会导致数据库锁住。睡觉,也不知道想的对不对,瞎扯一通。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值