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

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

lele0326
lele0326 嗯,今天就是用的你说的方法解决了,使用了hibernate的悲观锁
5 年多之前 回复

4个回答

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

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

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

lele0326
lele0326 同步的话以后要用到集群,所以没有采用,谢谢你的回答
5 年多之前 回复

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问