HibernateException: найдено два представления одной коллекции

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

@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 ответов


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


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


еще одна причина исключения " org.зимовать.HibernateException: найдено два представления одной и той же коллекции" дублируются геттеры/сеттеры в сущности.


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

    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); 

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