首页 > 解决方案 > Spring Data JPA:一对多映射:SQLIntegrityConstraintViolationException

问题描述

我有两个实体类客户和产品,一个客户可以购买多个产品(一对多映射)

@Entity
public class Customer {
    @Id
    @GeneratedValue
    private int id;
    private String name;
    private String email;
    private String gender;
    @OneToMany(targetEntity = Product.class,cascade = CascadeType.ALL)
    @JoinColumn(name ="cp_fk",referencedColumnName = "id")
    private List<Product> products;
}

@Entity
public class Product {
    @Id
    private int pid;
    private String productName;
    private int qty;
    private int price;
}

当一个客户拥有多个产品时,它工作正常。

当一个客户购买的现有产品也被另一个客户购买时,问题就出现了。

请求有效负载 1:(它可以正常工作,创建一个用户 basant 和两个产品)

{
    "customer": {
        "name": "Basant",
        "email": "b@gmail.com",
        "gender": "male",
        "products": [
            {
                "pid": 201,
                "productName": "Mobile",
                "price": 10000,
                "qty": 1
            },
            {
                "pid": 399,
                "productName": "Laptop",
                "price": 200000,
                "qty": 3
            }
        ]
    }
}

请求有效负载 2:(此请求将给出 java.sql.SQLIntegrityConstraintViolationException: Duplicate entry '201' for key 'product.PRIMARY')

{
    "customer": {
        "name": "Santosh",
        "email": "s@gmail.com",
        "gender": "male",
        "products": [
            {
                "pid": 201,
                "productName": "Mobile",
                "price": 10000,
                "qty": 1
            },
            {
                "pid": 286,
                "productName": "clothes",
                "price": 40000,
                "qty": 2
            }
        ]
    }
}

我们如何确保 Santosh 也能够购买 Basant 购买的同一部手机?你能帮我解决这个问题吗

标签: hibernatejpaspring-data-jparelational-databaseone-to-many

解决方案


推荐阅读