【问题标题】:Spring Data, MySQL and not working unique valueSpring Data、MySQL 和不工作的独特价值
【发布时间】:2018-12-16 13:21:18
【问题描述】:

我在进入 Spring Data 时遇到了麻烦

我得到了实体Product,它有Category(我猜关系类型是对的?产品有一个类别,类别有很多产品)

@Entity
public class Product implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinColumn(name = "category_id")
    private Category category;        
}

@Entity
class Category implements Serializable {

    public Category() {

    }

    public Category(String name){
        this.name = name;
    }

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "category_id")
    private Long id;

    @Column(unique = true)
    private String name;

    @OneToMany(mappedBy = "category", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private Set<Product> products;
}

现在我尝试通过 Postman 添加新的 Product,调用我的 RestController

@PostMapping("/add")
    public Product addProduct(@Valid @RequestBody Product product){
        return repository.save(product);
    }

有 2 个以下请求

{
    "name" : "pork",
    "category" : "meat"
}

{
    "name" : "chicken",
    "category" : "meat"
}

在结果中我得到了 2 个以下回复

{
    "id": 1,
    "name": "pork",
    "category": {
        "id": 1,
        "name": "meat",
        "products": null
    }
}

{
    "id": 2,
    "name": "chicken",
    "category": {
        "id": 2,
        "name": "meat",
        "products": null
    }
}

在数据库中,我实际上得到了 2 个名为“肉类”的类别(即使它应该是独一无二的。此外,我的 Category 课程中真的需要 Set&lt;Product&gt; 吗?TBH,Category 对此没有兴趣完全没有。

【问题讨论】:

    标签: mysql database spring-data


    【解决方案1】:

    您不需要在 Category 类中设置产品(建议仅使用 @ManyToOne)。

    【讨论】:

      【解决方案2】:

      您的代码存在一些问题。

      1. 您直接使用实体作为其余 API 模型。建议创建一个单独的 ProductModel,其中仅包含客户有权访问的字段。

      2. 您在产品创建中将类别创建混合在一起,但您在请求中的类别仅包含名称。对于后端,除非你检查是否存在这样的类别,否则它总是被视为一个新的类别。

      3. 在调用repository.save 之前,您需要让category 知道里面的产品是什么。在您当前的代码中,只有产品知道它的类别。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-02-24
        • 2016-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-12
        • 1970-01-01
        相关资源
        最近更新 更多