每次嘗試將重復的產品添加到 Client 類時,我都會收到錯誤訊息。
org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "uk_8opk6otadh2pkvi9bghguwp89"
Detail: Key (products_id)=(500010) already exists.
我的物體
@Entity
public class Client {
@Id
private String id;
@OneToMany
private List<Product> products;
}
@Entity
public class Product {
@Id
private String id;
private Boolean foreign;
private Integer price;
}
當我呼叫.save()休眠試圖重新保存一個已經存在的產品時。我相信這是由于它如何級聯事物。
public Client addNewProduct(Client client, Product newProduct) {
List<Product> products = client.getProducts();
products.add(newProduct);
client.setProducts(products);
return clientRepository.save(client);
}
我只想能夠將重復項添加到串列<>。我相信這是&應該是一個單向的關系。
uj5u.com熱心網友回復:
這不適用于您當前的關系,我不明白您為什么要添加重復項,但如果必須,那么您必須為此創建一個新物體。一個例子是這樣的:
@Entity
public class ProductBatch {
@Id
private String id;
@OneToOne
private Product product;
private Integer count;
// getter & setter
}
然后你Client像這樣改變你的:
@Entity
public class Client {
@Id
private String id;
@OneToMany
private List<ProductBatch> products;
}
這使您的addNewProduct功能成為可能:
public Client addNewProduct(Client client, Product newProduct) {
List<ProductBatch> products = client.getProducts();
boolean exists = false;
for(ProductBatch product : products) {
if(product.getProduct().equals(newProduct)) {
product.setCount(product.getCount() 1);
exists = true;
}
}
if(!exists) {
BatchProduct product = new BatchProduct();
product.setProduct(newProduct);
product.setCount(0);
products.add(product);
}
client.setProducts(products);
return clientRepository.save(client);
}
uj5u.com熱心網友回復:
這與 JPA 或 Hibernate 無關。約束是資料庫約束,它是正確的。如果外鍵已經是表的一部分,嘗試再次添加它,就會違反此約束。ID 是唯一的,它應該保持這種狀態。所以添加重復項(至少具有相同的 ID)將不起作用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/416061.html
標籤:
上一篇:如何將HashMap傳遞給CriteriaBuilder并添加到Predicates串列
下一篇:如何修復無法延遲初始化集合
