2016-05-17 87 views
0

根據字段值逐個選擇列表並更新記錄。如何避免重複更新和插入?選擇一個列表,並根據某個字段逐個更新記錄。如何避免重複更新?

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,和客戶記錄將被更新兩次!

如何避免這種情況?

回答

0

在你的mysql中使用主鍵。

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

    primary key(yourPrimaryKey) 
); 

主鍵將成爲您每次交易的唯一代碼。就像任何便利店的收據號碼一樣

+0

是的!如果我將SD中的customer_id設置爲唯一,它就可以工作。但爲了與歷史數據和邏輯兼容,我無法做到這一點!你知道一些其他的解決方案,只是通過使用java代碼,而不是數據庫約束嗎? – footoss

+0

@footoss你會請網站的歷史數據和邏輯的例子嗎?也許你沒有讓你的主主鍵父其它表列.. 例如: 你已經收到表格( receipt_no INT(10) –

+0

@footoss請你的網站是什麼歷史數據和邏輯的例子嗎? 。也許üdidnt讓你的主主鍵父其它表列 例如: 你有 創建表回執( receipt_no INT(10), 主鍵(receipt_no)); 創建表receipt_info( receipt_no int(10), items varchar(50), 主鍵(receipt_no)); 看着這個例子,你有2票receipt_no。父母將在桌面收據中。更好的外鍵將receipt_info.receipt_no鍵入receipt.receipt_no –

相關問題