Переход в спящий режим: настройка нескольких @OneToMany и ManyToOne

#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
}
  

Я хочу настроить следующее поведение:

  1. Каждый раз после удаления пользователя: учетные данные сайта должны быть удалены
  2. Каждый раз после удаления сайта: учетные данные сайта должны быть удалены
  3. Каждый раз после удаления учетных данных сайта: никаких последствий для других объектов, теперь я получаю сообщение об ошибке : update or delete on table "site_credentials" violates foreign key constraint "fkogfi5ft4imogbguv2jxjrishb" on table "users_sites" . Я знаю причину, но не знаю, как это исправить с помощью entities adjust.

Комментарии:

1. Пожалуйста, добавьте код, в котором вы выполняете фактическое удаление. Кроме того, есть ли причина SiteCredentials , по которой не содержится User объект?

2. Не видя фактического кода, который вы используете для выполнения удаления, я бы предположил, что вы неправильно синхронизируете двунаправленно связанные объекты. Т.е. Если вы удалите объект класса SiteCredentials , соответствующий объект класса Site может не обновляться. Взгляните на эту статью Влада Михалча о том, как синхронизировать ваши объекты в двунаправленной ассоциации.