首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在spring引导java.util.ConcurrentModificationException\r\n\tat java.base/java.util.ArrayList.forEach(ArrayList.java中添加多个窗体

在spring引导java.util.ConcurrentModificationException\r\n\tat java.base/java.util.ArrayList.forEach(ArrayList.java中添加多个窗体
EN

Stack Overflow用户
提问于 2022-11-11 08:11:56
回答 3查看 36关注 0票数 0

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

这是我的实体类别

代码语言:javascript
复制
@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);
            }
        }

}

这是实体产品

代码语言:javascript
复制
@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;

}

这是我的控制器

代码语言:javascript
复制
@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);
                
        }

当我试图发布一个类别和多个产品时,它会显示出这个问题。

代码语言:javascript
复制
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)

我想知道我的代码出了什么问题,以及如何修复那些家伙

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-11-11 08:35:54

我修正了将列表更改为Set,并将@Data注释更改为@getter和@setter,因为我遇到了一个新的错误(java.util.AbstractSet.hashCode),它现在起作用了。

票数 0
EN

Stack Overflow用户

发布于 2022-11-11 08:25:56

您只需要保存c,因为它已经包含了要保存的所有内容。不需要任何循环。ConcurrentModificationException是指当您在for-循环中更改实体时.这个问题会对你有所帮助:

Hibernate throwing a ConcurrentModificationException

票数 0
EN

Stack Overflow用户

发布于 2022-11-11 08:26:52

代码语言:javascript
复制
List<Product> products = c.getProducts();
products.forEach(item -> c.add(item));

问题就在这里。您正在尝试迭代列表,并尝试将项添加到相同的列表中。这是不可能的。您可以添加一个临时列表来添加项目。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74399663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档