У меня есть случай, когда объект LiveStreamInformation
может принадлежать к TwitchAccount
, YoutubeAccount
или Mixer Account
. В действии объект LiveStreamInformation
будет принадлежать только одному из этих объектов учетной записи. Это сопоставления, которые я установил, но когда я предварительно выполняю такие операции, как:
TwitchAccount account = findById(id);
account.setLiveStreamInformationObject(info);
update(account);
Изменение не выполняется (но происходит молча). Вот отрывки того, как настраиваются отображения гибернации:
TwitchAccount:
public class TwitchAccount {
@OneToOne(mappedBy = "twitchAccount", cascade = CascadeType.ALL)
private LiveStreamInformation liveStreamInformation;
}
LiveStreamInformation:
public class LiveStreamInformation {
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "liveStreamInformationId")
private TwitchAccount twitchAccount;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "liveStreamInformationId", referencedColumnName = "liveStreamInformationId")
private MixerAccount mixerAccount;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "liveStreamInformationId", referencedColumnName = "liveStreamInformationId")
private YoutubeAccount youtubeAccount;
}
Обратите внимание, что YoutubeAccount и MixerAccount имеют одинаковую точную структуру /отображение как TwitchAccount (только с соответствующим mappedBy)
Вот пример того, как мы пытаемся установить информационный объект живого потока для учетной записи
if (info != null) {
LiveStreamInformationResponseDto dto = info.convertToResponseDto();
dto.setUser(f.getFollows().convertToResponseDto());
liveStreams.add(dto);
// add/update to db for future checks
persisted = liveStreamInformationService.create(info);
twitchAccount.setLiveStreamInformation(persisted);
update(twitchAccount);
}
Метод обновления выглядит следующим образом (и работает в любом другом случае в моем приложении)
@Override
public void update(final T entity) {
Preconditions.checkNotNull(entity);
getDao().save(entity);
}
Я предполагаю, что мой вопрос заключается в том, есть ли у меня настройки сопоставлений, поскольку это действительно @OneToOne или @OneToNone (который не существует), и почему это не такобновление правильно?