我有 2 个实体:
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString(exclude = "products")
@Entity
@Table(name = "categories")
public class Category {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String categoryName;
private String categoryType;
@OneToMany(mappedBy = "category", cascade = CascadeType.ALL)
private List<Product> products;
}
第二个实体:
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "products")
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String productName;
private String productDescription;
@ManyToOne()
private Category category;
}
每个实体我都有 2 个存储库:
@Repository
public interface ProductRepository extends JpaRepository<Product, Long> {
}
@Repository
public interface CategoryRepository extends JpaRepository<Category, Long> {
}
然后我将此 JSON 发送到 cintroller,并保存所有产品:
{
"products": [{
"productName": "product1",
"productDescription": "productDescription1",
"category": {
"categoryName": "catName1",
"categoryType": "type1"
}
},
{
"productName": "product2",
"productDescription": "productDescription2",
"category": {
"categoryName": "catName1",
"categoryType": "type1"
}
},
{
"productName": "product3",
"productDescription": "productDescription3",
"category": {
"categoryName": "catName2",
"categoryType": "type2"
}
}]
}
然后我需要保存它:
@PostMapping(value = "test")
public Category test(@RequestBody() RequestTest products) {
List<Product> productList = products.getProducts();
for (Product product : productList) {
//save all
}
}
类别没有 id,当我获得此 JSON 时,我需要创建所有产品并设置类别,但我没有类别 id,如果我执行下一步:
for (Product product : productList) {
Category category = product.getCategory();
Category save = categoryRepository.save(category);
product.setCategory(save);
productRepository.save(product);
}
我为每个产品创建了新的 cteore,我得到了这个:
49 catName1 type1
51 catName1 type1
53 catName2 type2
cat_id
50 productDescription1 product1 49
52 productDescription2 product2 51
54 productDescription3 product3 53
但我需要:
49 catName1 type1
51 catName2 type2
cat_id
50 productDescription1 product1 49
52 productDescription2 product2 49
54 productDescription3 product3 51
最佳答案
您可能需要首先查找类别对象是否已存在。
您可以创建一个查询来搜索是否存在具有相同名称和类型的类别。如果存在,请使用该对象,该对象也将具有 ID,否则继续使用当前代码。
关于java - 如果父实体没有 ID,则直接保存 OneToMany 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47429560/