Я пытаюсь использовать @OrderColumn
аннотация с В спящем режиме 3.5
@OneToMany(mappedBy = "parent",fetch=FetchType.EAGER, cascade=CascadeType.ALL)
@OrderColumn(name = "pos")
private List<Children> childrenCollection;
При получении данных все хорошо работает. Но я не могу заставить его переупорядочить элементы в Списке и сохранить новый порядок к базе данных.
Комбинация @OneToMany (mappedBy = "...") и @OrderColumn не поддерживается Hibernate. Эта проблема JIRA отслеживает запрос на выдачу более очевидного сообщения об ошибке при использовании этой недопустимой комбинации: http://opensource.atlassian.com/projects/hibernate/browse/HHH-5390
Я думаю, что это не Не поддерживается в основном потому, что это странная модель отношений. Приведенные выше аннотации указывают на то, что «одна» сторона отношения определяет, как отношение будет сброшено в базу данных, но порядок / позиция доступны только на стороне «многие» при изучении списка. Для стороны "многие" имеет больше смысла владеть отношениями, поскольку эта сторона знает как о членстве, так и о порядке элементов.
Документы Hibernate Annotations описывают эту ситуацию довольно подробно:
Обходной путь - удалить атрибут «mappedBy», в результате чего ассоциация будет использовать стратегию таблицы соединения по умолчанию вместо столбца в целевой таблице. Вы можете указать имя объединяемой таблицы, используя аннотацию @JoinTable.
Чистый эффект этого изменения состоит в том, что «многие» стороны отношения теперь определяют, как отношения будут сохраняться. Ваш java-код должен гарантировать, что список обновлен правильно, потому что Hibernate теперь будет игнорировать «одну» сторону при сбрасывании объектов.
Если вы по-прежнему хотите, чтобы в Java была доступна «одна» сторона, сопоставьте ее с
@ManyToOne
@JoinColumn(name="...", insertable=false, updatable=false, nullable=false)