У меня есть две таблицы (объекты) с именами User и Profile в JPA, которые синхронизируются с базой данных MySQL. Связь между ними OneToOne и двунаправленная.
Вот как я сделал отношение в модели:
Пользователь:
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL, optional = false)
private Profile profile;
Профиль:
@OneToOne(cascade = CascadeType.ALL, mappedBy = "profile", optional = false)
private User user;
Я создаю REST API, и моя проблема в том, что я обновляю профиль по его идентификатору с контроллера.
Прежде чем обновлять данные в Profile, я могу использовать getUser из этого профиля.
После обновления данных в Profile (с помощью profileService.update(profile);) я не могу использовать getUser для этого профиля.
Похоже, что отношения были нарушены.
В базе данных нет USER_ID в таблице Profile, только таблица «Пользователь» имеет столбец PROFILE_ID.
Отношение работает нормально, пока я его не обновлю.
@dquijada Я знаю, но не могу опубликовать даже минимальный пример. Он будет очень большим, потому что его большой проект Spring REST
Вы проверяли, сохраняется ли связь в базе данных? Это может быть пример того, как вы непреднамеренно изменили данные перед вызовом .update.
В таблице @dquijada «Пользователь» все еще установлен «PROFILE_ID». Но перестает работать в другом направлении
Можете ли вы поделиться кодом того, как вы обновляете сущность?
Минимально полный и проверяемый пример - это не «весь код вашего проекта». Это минимальный, полный и проверяемый пример, то есть что-то минимальное, но завершенное, воспроизводящее проблему.
@JBNizet Я знаю, но насколько возможно ядро, модель и безопасность REST могут быть достаточно минималистичными, чтобы включить их в сообщение
REST и безопасность не имеют ничего (или, по крайней мере, не должны иметь ничего общего) с вашей проблемой. По мере того, как вы это описываете, вы получаете профиль и обновляете его. Для этого вам не нужен REST или безопасность. Написание этого минимального примера поможет вам выяснить или, по крайней мере, точно определить, в чем проблема.




Я исправил проблему. Это было вызвано тем, что перед обновлением пользователь не был настроен в профиль, потому что «dao.update ()» просто заменяет данные, а не обновляет их.
Можете ли вы создать Минимальный, полный и проверяемый пример? Наличие большего количества кода может помочь нам найти, что не так, но слишком много кода может быть вредным.