Ребята, пожалуйста, помогите мне решить следующую проблему.
Я столкнулся со знаменитой ошибкой "невозможно одновременно получить несколько сумок", потому что у меня есть два списка в моей родительской сущности.Вот небольшая часть кода:
class Manager{
@OneToMany(cascade = CascadeType.ALL)
@Fetch(FetchMode.JOIN)
@IndexColumn(name = "id")
private List<Action> actions;
@OneToMany(cascade = CascadeType.ALL)
@Fetch(FetchMode.JOIN)
@IndexColumn(name = "id")
private List<Activity> activities;
(...)
}
Отображение является однонаправленным.
ОК, я гуглил, что могу использовать аннотацию IndexColumn, чтобы исправить это.Я реализовал это, как вы видите, и теперь я не получаю упомянутое исключение.Но проблема в том, что теперь, если я хочу получить всех Менеджеров из базы данных, я получаю БОЛЬШЕ экземпляров менеджера, которые действительно существуют!
Например, 9 экземпляров Менеджера, если у меня есть только 1 менеджер и 3 дочерних экземпляра в каждой коллекции.Я могу понять, почему это происходит: Hibernate производит выбор, который выглядит как
select ... from Manager this_
left outer join manager_action actions3_ on this_.id=actions3_.Manager_id
left outer join Action action4_ on actions3_.actions_id=action4_.id
left outer join Manager_Activity activities5_ on this_.id=activities5_.Manager_id
left outer join Activity activity6_ on activities5_.activities_id=activity6_.id
... и он действительно выбирает БОЛЬШЕ строк, чем один.
Почему это происходит?Как я могу это исправить?