一个网上购物系统,当客户购买某个产品后,(1)需要记录此次交易的详细情况,(2)并相应地从仓库库存中扣除已出售的产品仓储量。小张在调试的过程中发现,在并发条件下,零库存的产品依然可能被卖出。请分析造成该问题的原因,并简要描述解决方案。

解决方案 »

  1.   

    1、Hiberrnate transaction2、或者在存贮过和中写事务
      

  2.   

    这是同步的问题。并发条件下,A和B同时发现库存有1件产品,于是都以为自己能把它卖出去。A卖了,并且把库存置为0,这时B就出现你所说的“零库存的产品依然可能被卖出”的情况了。
    A操作数据库的时候要使用事务,A从发现有一件产品,到把它从1-1=0,这个过程中不能有别人查这个表。。A搞定了。成功卖出就是0件剩余,失败的话库存还是1。这时B再去查....
    建议了解下“事务”的概念..
      

  3.   

    数据库连接
    1. con.setAutoCommit(false);
    2.干你要干的事(主要是数据库操作,包括查库存,卖出时库存数-n)
    3.con.commit();
    4.con.setAutoCommit(true);
    你做第二步的过程中,别人是不查不了库存的,等你的操作完成后。别人才可以查。。放心,第二步很快。不过你的问题也正是两个以上人同时干第二步才出现的。