如何使用合并
在我的 Web 层中,我显示了一个任务列表,并且对于每个任务,它显示了它有多少个 TaskError。任务以这种方式在控制器类中获取:
public List<Task> getTasks () {
return taskEJB.findAll();
}
任务具有与 TaskErrors 的 @OneToMany 映射:一个任务可以有多个任务错误。
当我删除单个 TaskError 时,Web 层中的控制器会调用 TaskErrorFacade:remove(taskError)。 TaskErrorFacade 是一个无状态会话 bean。代码:
public void remove (TaskError taskError) {
entityManager.remove(entityManager.merge(taskError));
Task task = taskError.getTask();
task.deleteTaskError(taskError);
task = entityManager.merge(task);
}
Task:deleteTaskErrors(TaskError taskError) 只是从列表中删除任务:
public void deleteTaskError (TaskError p_error) {
taskErrorCollection.remove(p_error); // gives true
}
这有效。 Web 层显示一个表格,其中包含所有任务及其所具有的任务错误数。删除 TaskError 后该数字会下降 1。
但是... TaskErrorFacade:remove(taskError) 的以下两个实现不起作用:Web 层中的表格不会减去总任务错误计数的 1(但是,它们会在数据库中删除):
public void remove (TaskError taskError) {
entityManager.remove(entityManager.merge(taskError));
Task task = taskError.getTask();
task = entityManager.merge(task); // the merge is done before the deletion
task.deleteTaskError(taskError);
}
并且:
public void remove (TaskError taskError) {
entityManager.remove(entityManager.merge(taskError));
taskError.getTask().deleteTaskError(taskError); // no merge
}
为什么上面的两个实现不起作用?
编辑: 关系的映射也很重要。任务在 TaskError 中的映射方式如下:
@JoinColumn(name = "task_id", referencedColumnName = "id")
@ManyToOne(optional = false)
private Task task;
In my Web tier I show a list of Tasks and for each task it shows how many TaskErrors it has. The tasks are fetched in a controller class this way:
public List<Task> getTasks () {
return taskEJB.findAll();
}
Task has a @OneToMany mapping with TaskErrors: a task can have multiple task errors.
When I delete a single TaskError, a controller in the Web tier calls TaskErrorFacade:remove(taskError). TaskErrorFacade is a stateless session bean. The code:
public void remove (TaskError taskError) {
entityManager.remove(entityManager.merge(taskError));
Task task = taskError.getTask();
task.deleteTaskError(taskError);
task = entityManager.merge(task);
}
Task:deleteTaskErrors(TaskError taskError) simply deletes the task from the List:
public void deleteTaskError (TaskError p_error) {
taskErrorCollection.remove(p_error); // gives true
}
This works. The Web tier shows a tabel with all the task and the number of Task Errors it has. The number drops by 1 after deleting a TaskError.
But... the following two implementations of TaskErrorFacade:remove(taskError) don't work: the tabel in the Web tier doesn't subtract 1 of the total Task Error count (however, they are deleted in the database):
public void remove (TaskError taskError) {
entityManager.remove(entityManager.merge(taskError));
Task task = taskError.getTask();
task = entityManager.merge(task); // the merge is done before the deletion
task.deleteTaskError(taskError);
}
And:
public void remove (TaskError taskError) {
entityManager.remove(entityManager.merge(taskError));
taskError.getTask().deleteTaskError(taskError); // no merge
}
Why are the two implementations above not working?
Edit: also important are the mappings of the relations. Task is mapped in TaskError this way:
@JoinColumn(name = "task_id", referencedColumnName = "id")
@ManyToOne(optional = false)
private Task task;
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论