日期:2014-05-19  浏览次数:20799 次

关于事务控制的问题
我有2个表,主表A,子表B,
我有这样的一个需求,做一个考评表的功能,有自评人,考评人(第一、二、三)2种角色,自评人给自己评完分数之后将数据发给考评人,那么第一考评人一定会有一个,第二、第三考评人可能有也可能没有,那么当出现多个考评人对同一个考评表进行考评的时候就会现并发操作。当时的处理是直接在页面算出总分保存到主表里,然后将每个考评项根据考主表的ID批量的删除之后再批量的插入到子表里,大家应该能明白是个什么概念吧?由于当初想做得灵活点的问题,第一、二、三每个内都不只一个考评人,所以当初的分数是类似80;80;80这样放的数据,现在当2个用户同时进入到同一个考评表的时候,只是他们各自为不同的考评人,代码是只会修改当前考评人的数据,在批量删除之前将子表的数据load到内存里然后与将的数据进行比较匹配后再批量插入到子表里。这个过程其实如果是在正常的services里无论结果和还是代码都是没有问题的。
现在的问题就是,因为我当前的开发环境是在别人开发的平台上进行的,写的代码也是人家提供的平台脚本写的,所以根本就没办法自己写java代码,如果我不用spring的事务也可以自己在代码块上加lock,这些我都没有办法做到,因为没有事务的控制所以现在问题很严重 我希望我能在for循环批量插入数据的时候对表加锁,这样后面要对该表进行更新操作的都要等待。这个不知道要怎么弄
我在网上有搜索相关的问题,人家说在select ... for update加锁,可是这样还能进行insert into动作?
我又在想如果我用insert into ... select ... union all select ...这样的插入sql语句是否表示对表加了锁?
或者说有存储过程实现,但是不知道怎么弄?
或者说在主表里加个隐藏字段hidlock(0/1,默认为0),如果有对子表进行更新操作的时候将这个字段设为1,后面别的请求更新子表的操作都进入等待队列状态,但是这个等待队列不知道具体要怎么写才好,因为考虑到时效的问题,不可能让其等待太长的时间,等待多久才算合适?
麻烦各位大虾给点建议或者是解决方案,谢谢

------解决方案--------------------
这帖子都多久了啊,你还没解决啊!!!
------解决方案--------------------
如果没发控制事务,你可以考虑修改表结构,把考评人(第一、二、三)都提取出来作为关联表,一对多。
每个受考评人可以接受多个考评人的考评。这样就不存在事务的问题了撒!