0 0

关于spring mvc + hibernate+spring 用户在不同客户端同时插入数据的问题5

例如在签到模块中,一天一个用户只能签到一次,签到后向数据库中插入一条记录,在controller中先判断此用户是否当天已经签到,如果用户同时在不同处登录点击签到按钮,也就是同时访问controller,假如当天这个用户还没有签到,那么同时访问controller去查询数据库两个客户端都会得到还没有签到的结果,随即同时都向数据库插入了签到数据。那么就造成了一个用户在签到表中有两条当天的签到记录,这种情况该怎么避免呢?请高手给解惑,谢谢了。
2014年9月25日 00:53

4个答案 按时间排序 按投票排序

0 0

采纳的答案

使用一个统一的锁,在查询判断前锁定,插入后释放锁;那么另一个客户端只能在你插入后才能进行查询,如果重复了,不让插入

2014年9月25日 17:55
0 0

表上建立唯一 索引  应该是最简单的方案

2014年9月26日 13:12
0 0

最近也在头疼这方面的问题,说说我的一些想法吧
1.现在网上有种说法是轻controller,重model,也就是把逻辑校验不放在controller层,而是放在业务层,这样你只需要在业务层中加个同步块就可以达到要求了,而且这样做的好处是随时都可以把业务层独立出来共各个客户端调用
2.简单点的处理,如果你的多个客户端公用的是同一个controller,那么你直接在controller里价格同步操作就行了。

2014年9月25日 11:50
0 0

可以使用Spring的aop在像数据库插入数据之前,做个判断吧,如果数据库中已经有签到数据,那么就不再向数据库中插入数据。

2014年9月25日 09:00

相关推荐

Global site tag (gtag.js) - Google Analytics