选择一个列表,并根据某个字段逐个更新记录。如何避免重复更新?

时间:2016-05-17 08:53:23

标签: java sql transactions spring-data-jpa currency

选择一个列表并根据某个字段值逐个更新记录。如何避免重复更新并插入?

public void takeOrder(String currentUser){
   String sql = "select * from customer where take_status is null limit 30";
   List<Customer> customerList = customerDao.findUnTakeCustomer(sql);
   for(Customer cust : customerList){
     if(cust.getEntryId > 3){
        cust.setTakeStatus(1);
        update(cust);
        Sd sd = new Sd();
        sd.setUser(currentUser);
        sd.setCust(cust);
        sd.setTakeTime(new Date());
        sdDao.save(sd);
     }
   }
}

如果两个用户同时接受订单,则customerList可能具有相同的记录,然后重复记录将插入表SD中,并且客户记录将更新两次!

如何避免这种情况?

1 个答案:

答案 0 :(得分:0)

在mysql中使用主键。

create table tablename(
     yourPrimaryKey int(10),
     otherColumns   varchar(10),

     primary key(yourPrimaryKey)
);

主键将是您每笔交易的唯一代码。就像任何方便商店的收据号码一样