Spring Boot с пружинными данными jpa.
У меня есть сценарий использования, когда я хочу продать n продуктов и получил запрос на продукт n + 1 за один раз.Итак, как я могу гарантировать, что я должен продавать только n продуктов и не выполнить все другие запросы.
Предположим, у меня есть 10 количество для любого идентификатора продукта 1. И получил 11 запросов одновременно для этого конкретноготовар.Как я могу гарантировать, что система продаст только 10 товаров и не выполнит последний запрос из-за отсутствия на складе.
Все запросы могут быть выполнены одновременно.
Я использую MySql.
Если я использую @version, он завершает все остальные транзакции, кроме 1-й.
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Version;
@Entity
public class ProductStockTable {
@javax.persistence.Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long Id;
private Long productId;
@Version
private Long version;
private Long currentStock;
public Long getId() {
return Id;
}
public void setId(Long id) {
Id = id;
}
public Long getProductId() {
return productId;
}
public void setProductId(Long productId) {
this.productId = productId;
}
public Long getVersion() {
return version;
}
public void setVersion(Long version) {
this.version = version;
}
public Long getCurrentStock() {
return currentStock;
}
public void setCurrentStock(Long currentStock) {
this.currentStock = currentStock;
}
}
@Transactional
public boolean checkStock(Long productId, Integer stock) {
ProductStockTable ps = stockRepo.findById(productId);
if (ps.getCurrentStock() > stock) {
ps.setCurrentStock(ps.getCurrentStock()-stock);
stockRepo.save(ps);
return true;
}
return false;
}
Если я сделаю ограничение MySql not negative
для currentStock, оно также не будет работать.
Есть ли какой-нибудь возможный способ добиться этого при загрузке Spring?