Аннотация @OrderColumn в В спящем режиме 3.5

Я пытаюсь использовать @OrderColumn аннотация с В спящем режиме 3.5

@OneToMany(mappedBy = "parent",fetch=FetchType.EAGER, cascade=CascadeType.ALL)
@OrderColumn(name = "pos")
private List<Children> childrenCollection;

При получении данных все хорошо работает. Но я не могу заставить его переупорядочить элементы в Списке и сохранить новый порядок к базе данных.

25
задан double-beep 2 February 2019 в 15:00
поделиться

1 ответ

Комбинация @OneToMany (mappedBy = "...") и @OrderColumn не поддерживается Hibernate. Эта проблема JIRA отслеживает запрос на выдачу более очевидного сообщения об ошибке при использовании этой недопустимой комбинации: http://opensource.atlassian.com/projects/hibernate/browse/HHH-5390

Я думаю, что это не Не поддерживается в основном потому, что это странная модель отношений. Приведенные выше аннотации указывают на то, что «одна» сторона отношения определяет, как отношение будет сброшено в базу данных, но порядок / позиция доступны только на стороне «многие» при изучении списка. Для стороны "многие" имеет больше смысла владеть отношениями, поскольку эта сторона знает как о членстве, так и о порядке элементов.

Документы Hibernate Annotations описывают эту ситуацию довольно подробно:

http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#entity-hibspec-collection-extratype-indexbidir

Обходной путь - удалить атрибут «mappedBy», в результате чего ассоциация будет использовать стратегию таблицы соединения по умолчанию вместо столбца в целевой таблице. Вы можете указать имя объединяемой таблицы, используя аннотацию @JoinTable.

Чистый эффект этого изменения состоит в том, что «многие» стороны отношения теперь определяют, как отношения будут сохраняться. Ваш java-код должен гарантировать, что список обновлен правильно, потому что Hibernate теперь будет игнорировать «одну» сторону при сбрасывании объектов.

Если вы по-прежнему хотите, чтобы в Java была доступна «одна» сторона, сопоставьте ее с

@ManyToOne
@JoinColumn(name="...", insertable=false, updatable=false, nullable=false)
29
ответ дан 28 November 2019 в 21:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: