つまり、3つのエンティティがあります。
製品の詳細を取得しようとすると、ショーを保存しようとすると正常に動作します
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": "牛の牛乳"、 "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", 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;
}
私はあなたが追加見逃していると思います@JoinColumn
上Product
にProductDetails
実体
@JsonBackReference
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "SKU_ID")
Product product;
また、@ JsonManagedReferenceを削除しCategory
たり、Stock
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加