如何解决使用JPA将记录插入多个表
我有三个实体
- 产品
- 产品详细信息
- 库存
- 类别 参考在下面
当我尝试获取产品的详细信息时,当我尝试将其保存时,它可以在控制台中正常显示
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
}
]
}
控制器方法
@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",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;
}
解决方法
我认为您错过了在@JoinColumn
实体的Product
上添加ProductDetails
@JsonBackReference
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "SKU_ID")
Product product;
此外,您可以尝试从Category
或Stock
删除@JsonManagedReference
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。