如果有多个人同时注册(同一个时间点。精确到秒),那么在这个时间点上的记录会出现相同的记录,在注册的Action有一个成员变量来接收JSP页面传递来的注册信息,但是在向数据库提交之前都已验证过该记录是否已存在,可是现在数据库中还是有相同的数据,这个有几方面原因,求大神相助!

解决方案 »

  1.   

    后台注册的那个service的方法需要同步
      

  2.   

    你是指的ID相同吧。同一时间注册。你的ID取的当前时间所以导致ID相同吧。
    你校验没用的原因应该是因为相同的数据是在你校验完以后加入的。
    你可以在每个用户注册完成后。
    让系统等待几毫秒再插下一个用户
    Thread.sleep(20);
      

  3.   

    同时注册时最好这个方法是synchronized让后来的先排队。
      

  4.   

    这个也许可行。我这里没有用到线程,也可以Thread.sleep(20);吗?
      

  5.   

    什么叫做:相同的记录?哪些东西相同了?不能在数据库中设置 Unique Index 么?
      

  6.   

    你的验证,单线程情况下是可以的。
    多线程情况下,是不起作用的。
    应该是注册用户信息表的标识符会重复的问题。给生成用户唯一标识符uuid加synchronized同步,这样uuid在多线程下是不会重复的。
      

  7.   

    如果你使用spring 时,会有这样的问题。spring 默认bean 配置是一个single ..也就是所有的请求都会便用这一个对象。你需要把这个改成 scope="prototype"
      

  8.   

    LZ说的重复应该是用户录入内容的重复了,比如A录入“中国银行”,B也同时录入“中国银行”,由于之前A、B都没保存,所以在前台检验时就通过,这时再提交到后台,就会出现重复了,虽然说两人的录入基本上是同时的,但服务器处理起来还是会有先后顺序的,建议在后台保存的时候也加一个验证做判断,在保存记录前先判断是否有重复的,如果有,就做异常处理或给用户提示。
      

  9.   

    我的解决方法是 本地生成PK, insert时一起插入进去,用的UUID. java.util.UUID
      

  10.   

    同意,用户名相同吗,Unique Index不就行了?,搞这么复杂