JPA / Hibernate один-к-одному каскадное удаление в модульном приложении - PullRequest
0 голосов
/ 28 марта 2011

У меня есть два класса сущностей из двух разных модулей в многомодульном приложении. Одна сущность имеет однонаправленное отношение «один к одному» с другой.

Первичная сущность "Song" происходит из модуля song-core, и она определена примерно так:

@Entity
public class Song {
   @Id(strategy = GenerationType.IDENTITY)
   private int id;
   private String name;
}

И следующая сущность под названием «SongLyrics» происходит из модуля «song-lyrics», который определяется примерно так:

@Entity
public class SongLyrics {
  @Id(strategy = GenerationType.IDENTITY)
  private int id;
  @OneToOne
  private Song song;
  @Column(nullable = false, length=1024)
  private String lyrics;
}

Поскольку сущность SongLyrics происходит из необязательного модуля «song-lyrics», который может или не может быть доступен в конечном приложении, его связь с сущностью «Song» является однонаправленной.

Теперь я хочу, чтобы сущность «SongLyrics» удалялась всякий раз, когда сущность «Song» удаляется. Но сейчас происходит то, что сущности «SongLyrics» остаются «сиротами», и удаляются только сущности «Song».

Пожалуйста, дайте свое понимание этого. Спасибо.

1 Ответ

3 голосов
/ 28 марта 2011

SongLyrics не может иметь одну идентичность в отношении один к одному.Один-к-одному означает, что они используют один и тот же первичный ключ.При использовании обычного внешнего ключа в базе данных для указания от SongLyrics до Song это отношение многие-к-одному.

Проблема в том, что нет отношения от Song к SongLyrics, поэтому каскадное переключение из режима гибернации не работает.

Вот варианты, которые мне приходят на ум:

  • создает отношение «многие ко всем» от Song до SongLyrics для разделения типов и возможности каскадирования (и навигации).
  • Использование видасобытий в вашем приложении, чтобы сообщить модулям, когда что-то удаляется, чтобы позволить им очистить (или даже наложить вето).
  • Использование триггеров базы данных для удаления SongLyrics.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...