HibernateException: найдено два представления одной коллекции - PullRequest
9 голосов
/ 30 ноября 2011

Если я сохраню объект, содержащий следующий список

@OneToMany(cascade=CascadeType.ALL, mappedBy="taskList")
@OrderColumn(name="position", nullable=false)
public List<Task> tasks = new ArrayList<Task>();

Я получаю исключение

org.hibernate.HibernateException: Found two representations of same collection

Код в Игре! Контроллер выглядит так:

TaskList taskList = taskList.findById(taskListId);
taskList.add(position, task);
taskList.save();

Если я вставлю taskList.refresh() до того, как этот блок заработает, но информация о местоположении будет потеряна (что приводит к другим ошибкам).

Это ошибка Hibernate или что-то не так с моим кодом?

Ответы [ 5 ]

11 голосов
/ 01 декабря 2011

Проблема заключалась в том, что Hibernate не поддерживает комбинацию @OneToMany(mappedBy=...) и @OrderColumn.Без mappedBy Hibernate использует таблицу соединений, и все работает как положено.См. объяснение .

0 голосов
/ 02 августа 2017

Та же ошибка возникает при попытке изменить связанную коллекцию объекта. e.g.:

    MyObject myObject = myObjectService.get(id);
    List<Task> newTasks = //populate new list of Task here
    myObject.setTasks(newTasks);
    myObjectService.saveOrUpdateObject(myObject); // or merge(myObject)      

В таком случае это может быть решено с помощью:

    MyObject myObject = myObjectService.get(id);
    List<Task> newTasks = //populate new list of Task here
    myObject.setTasks(new List<Task>); // or myObject.getTasks().clear();
    myObject.getTasks().addAll(newTasks);
    myObjectService.merge(myObject); 
0 голосов
/ 15 февраля 2013

Другая причина исключения "org.hibernate.HibernateException: Найдено два представления одной коллекции" - дублированные методы получения / установки в объекте.

0 голосов
/ 21 июля 2012

проблема в том, что вы присоединились, и проверьте, не собираете ли вы данные, которых нет в таблице

0 голосов
/ 30 ноября 2011

Если вам нужно, чтобы список сохранялся, вам, возможно, придется аннотировать свой список с помощью @OneToMany, чтобы иметь возможность сохранить вашу сущность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...