#hibernate #one-to-one #many-to-one #bidirectional #asymmetric
#переход в режим гибернации #один к одному #многие к одному #двунаправленный #асимметричный
Вопрос:
У меня есть объект, который имеет ссылку на другой объект, представляющий текущее состояние определенных свойств, что позволяет мне отслеживать историю внесенных изменений. Для этого я определил двунаправленное отношение, которое не является симметричным, при этом OneToOne отвечает за постоянство, и оба объекта сохраняют ссылку на другой, поэтому я могу с одной стороны получить последнюю версию, а с другой стороны получить все версии для объекта. Это мое отображение:
В сущности A:
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "version_id", nullable = true, updatable = true)
private AVersion currentVersion;
и в объекте AVersion:
@ManyToOne
@JoinColumn(name = "A_id", insertable=false, updatable=false)
private A a;
Теперь это позволяет мне сохранить это за один шаг через A, но столбец «A_id» пуст для каждой строки в таблице AVersion, поэтому я не смогу получить все исторические данные для определенного объекта A, просматриваемого в таблице AVersion. Есть идеи, почему этот столбец не заполняется?
Большое вам спасибо!
P.S. Я пытался использовать Envers, но не смог из-за некоторых проблем с наследованием.
Комментарии:
1. Что ж, должен сказать, что я, наконец, не смог этого сделать. Я думаю, что асимметричные двунаправленные сопоставления не поддерживаются. В любом случае, я думаю, что envers мог бы помочь избавиться от версий и так далее, поскольку они исправили проблему с наследованием, или я мог бы просто восстановить последнюю версию с запросом, вместо того, чтобы использовать это отображение… но, в конце концов, решили сохранить родительский объект с нулевым отклонением, а затем обновить его с помощью набора отношений parent-chil.