Аннотации JPA для множественных однозначных самореферентных отношений - PullRequest
1 голос
/ 16 июня 2020

Я пытаюсь определить модель для объекта задачи, который имеет ссылку на предыдущую задачу и ссылку на следующую задачу. Вот как я попытался смоделировать эти отношения в своем классе CompletableTask.java:

@OneToOne(mappedBy = "previousTask", orphanRemoval = true)
@JoinColumn(name = "next_task_id")
private CompletableTask nextTask;

@OneToOne(mappedBy = "nextTask", orphanRemoval = true)
@JoinColumn(name = "previous_task_id")
private CompletableTask previousTask;

Однако, когда я загружаю свое приложение и позволяю Hibernate создавать необходимые обновления схемы для этого, я получаю следующую ошибку log:

org.hibernate.AnnotationException: Unknown mappedBy in: com.my_package.CompletableTask.nextTask, referenced property unknown: com.my_package.CompletableTask.previousTask

Мне удалось решить эту проблему, просто удалив аргумент mappedBy = "previousTask" из однозначной аннотации nextTask, но тогда previous_task_id не присутствует в таблица, которую генерирует Hibernate, я считаю, что она не соответствует моим предполагаемым целям. И в случае, если невозможно достичь желаемой схемы, которая имеет ссылки как на следующую, так и на предыдущую задачи, каковы мои альтернативы?

1 Ответ

3 голосов
/ 16 июня 2020

mappedBy обозначает атрибут, который «владеет» отношением в двунаправленном отношении. Поэтому не имеет смысла иметь mappedBy с обеих сторон. Удалите один.

...