2
我在这个应用程序中使用Spring MVC + Hibernate + JPA
。我需要做的是,更新与另一个实体(任务)关系@manyToMany
关系的实体(用户)。这里是我的代码,如何避免JPA和休眠中的实体合并java.util.ConcurrentModificationException
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
的新手。
您可以张贴整个堆栈跟踪? –
@ketanvijayvargiya当然可以。这里是复制stacktrace的链接[http://pastebin.com/QhZH5CHm]感谢您的关注。 – RYJ