繁体   English   中英

使用 JPA 将记录插入到多个表中

[英]Insert a record into multiple Table using JPA

我有三个实体,即

  1. 产品
  2. 产品详情
  3. 股票
  4. 类别参考如下

当我尝试获取产品的详细信息时,当我尝试保存它时它工作正常,在控制台中显示以下错误

2020-08-12 13:17:22.279  WARN 18612 --- [nio-9002-exec-1] .c.j.MappingJackson2HttpMessageConverter : Failed to evaluate Jackson deserialization for type [[simple type, class com.eMart.main.entity.Product]]: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot handle managed/back reference 'defaultReference': back reference type (java.util.List) not compatible with managed type (com.eMart.main.entity.Product)

我的问题是如何将产品添加到数据库中,以及我需要如何优化我的实体

输入

{
        "skuId": "2",
        "category": {
            "categoryId": 2,
            "categoryName": "food"
        },
        "description": "cow milk",
        "stock": {
            "stockId": 1,
            "inventoryCount": 5,
            "selfCount": 5
        },
        "productDetails": [
            {
                "productDetailId": 1,
                "cost": 10.0,
                "currency": "inr",
                "expiryDate": "2020-08-11T18:30:00.000+00:00",
                "supplierCode": 1
            }
        ]
    }

controller 方法

@PostMapping(value = "/test")
    public ResponseEntity<Product> test(@RequestBody Product product) throws Exception {
productRepositry.save(product);
        return new ResponseEntity(productRepositry.findAll(),OK);

    }
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Entity
public class Product {
    @Id
    @Column(name = "SKU_ID")
    String skuId=null;
    @ManyToOne
    @JoinColumn(name = "category_id")
    @JsonManagedReference
    Category category;

    @Column(name = "description")
    String description=null;

   @JsonManagedReference
    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "stock_id", referencedColumnName = "id")
    Stock stock=null;

    @JsonManagedReference
    @OneToMany(mappedBy = "product", fetch = FetchType.LAZY,
            cascade = CascadeType.ALL)
    Set<ProductDetails> productDetails;
}
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
     @Entity
    public class Stock {
    @Id
    @Column(name = "id")
    Integer stockId;
    @Column(name = "inventory_count")
    Integer inventoryCount;
    @Column(name = "self_count")
    Integer selfCount;
    @JsonBackReference
    @OneToOne(mappedBy = "stock",cascade = CascadeType.ALL)
    Product product;
    }
@Entity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor

public class Category {
    @Id
    @Column(name = "category_id")
    Integer categoryId;

    @Column(name = "category_name")
    String categoryName;



    @OneToMany(mappedBy = "category", fetch = FetchType.LAZY,
            cascade = CascadeType.ALL)
    @JsonBackReference
    List<Product> product;

    @Override
    public String toString() {
        return "Category{" +
                "categoryId=" + categoryId +
                ", categoryName='" + categoryName + '\'' +
                ", product=" + product +
                '}';
    }
}
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Entity
public class ProductDetails {
    @Id
    @Column(name = "id")
    Integer productDetailId;
    @Column(name = "cost")
    Double cost;
    @Column(name = "currency")
    String currency;
    @Column(name = "expiry_date")
    Date expiryDate;

    Integer supplierCode;

    @JsonBackReference
    @ManyToOne(fetch = FetchType.LAZY)
    Product product;
}

我认为您错过了在ProductDetails实体中的Product上添加@JoinColumn

@JsonBackReference
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "SKU_ID")
Product product;

此外,您可以尝试从CategoryStock中删除 @JsonManagedReference

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM