#hibernate
#переход в спящий режим
Вопрос:
У меня есть три класса данных: User
, Site
и SiteCredentials
. Я хочу настроить следующее поведение:
public class User {
@Id
@GeneratedValue
private Long userId;
@OneToMany(cascade = CascadeType.ALL)
private Set<SiteCredentials> sites;
//other fields
}
public class SiteCredentials {
@Id
@GeneratedValue
private Long id;
private Long userId;
@ManyToOne(fetch = FetchType.LAZY)
private Site site;
//other fields
}
public class Site {
@Id
@GeneratedValue
private Long siteId;
@OneToMany(cascade = {CascadeType.REMOVE, CascadeType.REFRESH}, orphanRemoval = true, mappedBy = "site")
private Set<SiteCredentials> siteCredentials;
//other fields
}
Я хочу настроить следующее поведение:
- Каждый раз после удаления пользователя: учетные данные сайта должны быть удалены
- Каждый раз после удаления сайта: учетные данные сайта должны быть удалены
- Каждый раз после удаления учетных данных сайта: никаких последствий для других объектов, теперь я получаю сообщение об ошибке :
update or delete on table "site_credentials" violates foreign key constraint "fkogfi5ft4imogbguv2jxjrishb" on table "users_sites"
. Я знаю причину, но не знаю, как это исправить с помощью entities adjust.
Комментарии:
1. Пожалуйста, добавьте код, в котором вы выполняете фактическое удаление. Кроме того, есть ли причина
SiteCredentials
, по которой не содержитсяUser
объект?2. Не видя фактического кода, который вы используете для выполнения удаления, я бы предположил, что вы неправильно синхронизируете двунаправленно связанные объекты. Т.е. Если вы удалите объект класса
SiteCredentials
, соответствующий объект классаSite
может не обновляться. Взгляните на эту статью Влада Михалча о том, как синхронизировать ваши объекты в двунаправленной ассоциации.