Как использовать слияние - PullRequest
       15

Как использовать слияние

1 голос
/ 25 ноября 2011

На своем веб-уровне я показываю список задач и для каждой задачи показывает, сколько у него есть TaskErrors. Задачи выбираются в классе контроллера следующим образом:

public List<Task> getTasks () {
    return taskEJB.findAll();
}

Задача имеет отображение @OneToMany с TaskErrors: у задачи может быть несколько ошибок задачи.

Когда я удаляю одно TaskError, контроллер на веб-уровне вызывает TaskErrorFacade: remove (taskError). TaskErrorFacade - это сессионный компонент без сохранения состояния. Код:

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
}

Это работает. На веб-уровне отображается таблица со всей задачей и количеством ошибок в ней. Число уменьшается на 1 после удаления ошибки TaskEr.

Но ... следующие две реализации TaskErrorFacade: remove (taskError) не работают: табель на веб-уровне не вычитает 1 из общего количества ошибок Task (однако они удаляются в базе данных) :

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
}

Почему две реализации выше не работают?

enter image description here

Редактировать: также важны сопоставления отношений. Задача отображается в TaskError следующим образом:

@JoinColumn(name = "task_id", referencedColumnName = "id")
@ManyToOne(optional = false)
private Task task;
...