0
我在多模块应用程序中有两个不同模块的两个实体类。一个实体在另一个实体之间具有单向一对一关系。在模块化应用程序中JPA /休眠一对一级联删除
主要实体“宋”是从一个模块歌核心,它的定义是这样的:
@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实体和可选的“歌曲的歌词”模块,这可能会或可能不会在最终应用是可用的,它与关系“宋”实体是单向的。
现在我想要删除“SongLyrics”实体,只要删除“Song”实体。但现在发生的情况是,“歌词”实体被留作“孤儿”,只有“歌曲”实体被删除。
请给出你的见解。谢谢。
小修正:'@ OneToOne'创建一个基于一对一关系的外键,就像''一样。 –
axtavt
2011-03-28 09:00:22
感谢@Stefan和@axtavt的建议。 我会更新SongLyrics,以便FK to Song也是主键。 但正如@Stefan强调的那样,歌曲与SongLyrics之间仍然没有任何关系,主要是因为它们跨越了各个模块。这就是为什么hibernate(或任何JPA提供者)不能传播“级联”效应的原因。 感谢Stefan对第二和第三个建议。我正在思考如何使用Spring AOP来处理这个问题,但是如果有任何可移植的方法来创建数据库触发器,那也可以。 – 2011-03-29 03:34:45