嗨,伙计们,我有一个问题,我有两个实体--产品和类别--我想以相同的形式添加一个类别和多个产品,就像在这个捕获中那样。

这是我的实体类别
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class Category {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long idcategory;
private String nom;
@JsonManagedReference("category")
@OneToMany(mappedBy = "category", fetch = FetchType.LAZY,cascade = {CascadeType.PERSIST,CascadeType.MERGE,CascadeType.REMOVE})
private List<Product> products= new ArrayList<>();
public void add(Product item) {
if (item != null) {
if (products == null) {
products= new ArrayList<>();
}
products.add(item);
item.setCategory(this);
}
}
}这是实体产品
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long idproduct;
private String nom;
private Integer prix;
@JsonBackReference("category")
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "categoryproduct", referencedColumnName = "idcategory")
private Category category;
}这是我的控制器
@RequestMapping(method = RequestMethod.POST)
public void addcategory(@RequestBody Category c) throws IOException {
List<Product> products = c.getProducts();
products.forEach(item -> c.add(item)
);
categorieRepository.save(c);
}当我试图发布一个类别和多个产品时,它会显示出这个问题。
java.util.ConcurrentModificationException\\r\\n\\tat java.base/java.util.ArrayList.forEach(ArrayList.java:1513)\\r\\n\\tat com.example.users.controller.CategoryController.addcategory(CategoryController.java:46)\\r\\n\\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)我想知道我的代码出了什么问题,以及如何修复那些家伙
发布于 2022-11-11 08:35:54
我修正了将列表更改为Set,并将@Data注释更改为@getter和@setter,因为我遇到了一个新的错误(java.util.AbstractSet.hashCode),它现在起作用了。
发布于 2022-11-11 08:25:56
您只需要保存c,因为它已经包含了要保存的所有内容。不需要任何循环。ConcurrentModificationException是指当您在for-循环中更改实体时.这个问题会对你有所帮助:
发布于 2022-11-11 08:26:52
List<Product> products = c.getProducts();
products.forEach(item -> c.add(item));问题就在这里。您正在尝试迭代列表,并尝试将项添加到相同的列表中。这是不可能的。您可以添加一个临时列表来添加项目。
https://stackoverflow.com/questions/74399663
复制相似问题