У меня возникла странная проблема при написании приложения. У меня есть два объекта, связанных с двунаправленным отношением.Неверный размер коллекции сущностей из отношения
@Entity
@NamedQueries(value = {
@NamedQuery(name = "Employee.findAll", query = "SELECT e FROM Employee e")
})
public class Employee extends AbstractModel<Long, Employee>{
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "EMP_TASK", joinColumns = {@JoinColumn(name = "EMP_ID", referencedColumnName = "ID")},
inverseJoinColumns = {@JoinColumn(name = "TASK_ID", referencedColumnName = "ID")})
private Set<Task> tasks = new HashSet<>();
}
@Entity
public class Task extends AbstractModel<Long, Task>{
@ManyToMany(mappedBy = "tasks", fetch = FetchType.EAGER)
private Set<Employee> employees = new HashSet<>();
}
Я запрашивая список сотрудников, использующих NamedQuery Employee.findAll
и отправив его на Jsp
@Override
protected void processDefaultAction() throws ServletException, IOException {
List<Employee> employees = employeeService.findAll();
request.setAttribute("employees", employees);
forward("employees");
}
Проблема возникает, когда я пытаюсь отобразить информацию о сотрудниках в JSP с дополнительной колонке Количество заданий который содержит ${fn:length(emp.tasks)}
.
Для некоторых объектов значение отображается ниже, чем должно быть e.q. 2 вместо 3 (в базе данных 3 отношения для данного сотрудника). Однако, когда я меняю код сервлета на:
@Override
protected void processDefaultAction() throws ServletException, IOException {
List<Employee> employees = new LinkedList<>();
for(Employee emp : employeeService.findAll())
employees.add(employeeService.find(emp.getId()));
request.setAttribute("employees", employees);
forward("employees");
}
все отображается правильно. Похоже, что сразу все сотрудники сразу же со своими отношениями работали неправильно. Любая идея, что может быть причиной такого поведения?