![](/img/trans.png)
[英]How to avoid java.util.ConcurrentModificationException
[英]How to avoid java.util.ConcurrentModificationException in entity merging in JPA and Hibernate
我在这个应用程序中使用Spring MVC + Hibernate + JPA
。 我需要做的是, 更新与@manyToMany
关系的实体(User)与另一个实体(Task)。 这是我的代码,
User user = baseRequest.getUser();
if (user.getTasks() != null && user.getTasks().size() > 0) {
// Get logged user by userId
User loggedUser = em.find(User.class, user.getUserId());
//Get existing tasks for loggedUser
List<Task> existingTasks = loggedUser.getTasks();
//Get new tasks for user by request
List<Task> tasks = user.getTasks();
for (Task t : tasks) {
// Look up new tasks by taskId
task = em.find(Task.class, t.getTaskId());
if (task != null) {
if(!existingTasks.contains(task)){
existingTasks.add(task);
}
}else{
throw new SfaCustomException(String.format("taskId is required"));
}
}
user.setTasks(existingTasks);
}
entityManager.merge(user);
entityManager.flush();
entityManager.refresh(user);
在这里,我需要向用户添加新任务 。 但是当我运行这个请求时,我得到的是java.util.ConcurrentModificationException
我尝试使用Iterator而不是使用for-each循环。 但结果相同。 换句话说,我尝试使用单独的List来添加旧任务和新任务,而不是使用与上面相同的列表。 但是当我调用entityManager.merge(user);
它删除现有任务并重新添加旧任务和新任务。 我需要做些什么才能避免出现此异常?
我感谢你的帮助,因为我是jpa
新手。
尝试改变这个:
//Get existing tasks for loggedUser
List<Task> existingTasks = loggedUser.getTasks();
对此:
//Get existing tasks for loggedUser
List<Task> existingTasks = new ArrayList<>(loggedUser.getTasks());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.