情景描述:有一个材料表(TbeA),包括某类材料个数,材料名称等;
如:水晶头,个数为20个有一个材料使用表(TbeB):包括使用某个申请单用到的材料如:
工单001,使用材料名称为水晶头的材料,使用个数为5个那么有个可有材料的查询结果为:
其中有一条记录为:水晶头,可用个数为15个
那么现在有a, b两个人因为维修设备的原因需要领取材料(水晶头)
其中a,需要领取8个水晶头,
b需要领取4个水晶头但是a,b两个人可能同时打开领取的界面,这时他们都要领取材料水晶头;
在表单上要填写领取的数量,a填写8个,b填写4个,
填写的过程中要进行领取数量的校验;校验准则是:填写的领取材料的数字不能大于水晶头的可用数量(20-5)=15,即首先填写的人要<=15
但是如果两个人都同时打开界面,读取到的可用数量都是15,而如果a通过填写领取了8个,并提交了表单。
则:可用数量就只剩下7个了;可:b界面上(如果不刷新)则仍然显示的是15而不是8个,这样在填写领用数量的时候就会出错;因为此时还是校验的15而不是8
这种情况怎么办呢?通过文本框填写的blue事件,可以通过异步获取到最新的可用数,但是如果当a在通过读取数据表中的可用数量后,b此时领用了4个,那么这个时候a获取的可用数量又不对了,应该是11个而不是15了。我的这种推断是否合理。
如果通过事务控制将如何处理?还请各位高人指点
如:水晶头,个数为20个有一个材料使用表(TbeB):包括使用某个申请单用到的材料如:
工单001,使用材料名称为水晶头的材料,使用个数为5个那么有个可有材料的查询结果为:
其中有一条记录为:水晶头,可用个数为15个
那么现在有a, b两个人因为维修设备的原因需要领取材料(水晶头)
其中a,需要领取8个水晶头,
b需要领取4个水晶头但是a,b两个人可能同时打开领取的界面,这时他们都要领取材料水晶头;
在表单上要填写领取的数量,a填写8个,b填写4个,
填写的过程中要进行领取数量的校验;校验准则是:填写的领取材料的数字不能大于水晶头的可用数量(20-5)=15,即首先填写的人要<=15
但是如果两个人都同时打开界面,读取到的可用数量都是15,而如果a通过填写领取了8个,并提交了表单。
则:可用数量就只剩下7个了;可:b界面上(如果不刷新)则仍然显示的是15而不是8个,这样在填写领用数量的时候就会出错;因为此时还是校验的15而不是8
这种情况怎么办呢?通过文本框填写的blue事件,可以通过异步获取到最新的可用数,但是如果当a在通过读取数据表中的可用数量后,b此时领用了4个,那么这个时候a获取的可用数量又不对了,应该是11个而不是15了。我的这种推断是否合理。
如果通过事务控制将如何处理?还请各位高人指点
解决方案 »
- 谁能解决?
- tomcat jstl 配置问题 Unable to read TLD "META-INF/c.tld" from JAR
- struct1 显示信息
- 求高手们告诉下解密算法,这几天等着急即用啊
- ibatis框架中在*SqlMap.xml中配置SQL语句,与ScriptRunner 类执行SQL语句脚本文件的区别
- 请问如何用java生成一个word文件,并对其内容进行操纵,有没有成熟的包有类似的功能?
- 如何设置Tomcat 让它能发布 JAVA 写的程序??
- 上班没几天经理就给我出难题,好心人请来看看
- 关于struct中使用sevlet的疑问?!请大虾近来看一下!!
- 用jxl导出不能打开,第一次保存液不行,要重新下载
- 本人写的rock框架,欢迎大家提意见,有分哦
- You cannot set autocommit during a managed transaction
如果a,b两人在一个时间内都打开了查询材料的界面,
他们都会显示在界面上是15的可用数量;而我们很多的判断都是基于这个15进行的;
另外如果当a填写可用数量的时候,库里还有15个,
那么他现在填写了8个,
不过还未提交这个事务。
此时b也进行了可用数量判断,后台是15,因此它也可以填写8个。
填写完成后提交了事务;此时库中应该只有7个可用数量了而这时a,也提交事务,不过现在已经不再验证可用数量了。它的8个也提交了,那么现在的可用数量就为-1,逻辑上不通啊。这种情况大家是怎么控制的?
需要在提交的时候再次进行验证可用数量吗、?
比如他们取的时候 版本号都为 5 ,A修改了数据库 , 版本号变成6了 , B再去修改数据库的时候,数据库的版本号已经为6的,但是他读取的时候版本号为5 ,这样就不会让他修改成功 。
没有用hibernate