我在多模块应用程序中有两个来自两个不同模块的实体类。一个实体在另一个实体上具有单向一对一的关系。
主要实体“Song”来自模块歌曲核心,它的定义如下:
@Entity
public class Song {
@Id(strategy = GenerationType.IDENTITY)
private int id;
private String name;
}
下一个名为“SongLyrics”的实体来自模块“歌词”,其定义如下:
@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”实体的关系是单向的。
现在,每当删除“Song”实体时,我都希望删除“SongLyrics”实体。但现在发生的事情是“SongLyrics”实体被留作“孤儿”,只有“歌曲”实体被删除。
请提供您对此的见解。感谢。
答案 0 :(得分:3)
SongLyrics
不能以一对一的关系拥有一个身份。一对一意味着它们共享相同的主键。当使用数据库中的普通外键指向SongLyrics
到Song
时,它是多对一关系。
问题在于Song
与SongLyrics
之间没有关系,所以从hibernate级联不起作用。
这些是我想到的选择:
Song
到SongLyrics
的多对多关系,以解除类型,并且仍然能够级联(和导航)。SongLyrics
。