【发布时间】:2016-05-06 11:23:41
【问题描述】:
我有以下模型(减少):
@Entity
public class Video {
@ManyToMany(fetch=FetchType.EAGER, cascade=CascadeType.ALL)
@JoinTable(name = "video_tag", joinColumns = {
@JoinColumn(name = "video_id", referencedColumnName = "id") }, inverseJoinColumns = {
@JoinColumn(name = "tag_id", referencedColumnName = "id") })
private Set<Tag> tags;
}
@Entity
public class Tag {
@ManyToMany(mappedBy="tags", fetch=FetchType.LAZY)
private Set<Video> videos;
}
我有一个数据库,其中视频连接到多个标签,反之亦然。我想删除所有视频并将其级联以删除所有标签。在视频实体上调用 remove 会导致一个循环,在标签和视频之间来回来回几轮之后,java 编译器会打印循环的堆栈转储。
如何使用 JPA 删除视频/所有视频,最好是通过删除所有视频并将删除级联到标签。
【问题讨论】:
-
您要删除 a 视频,还是所有视频和所有标签?这是完全不同的。删除视频时不能删除视频的标签,因为标签可能被其他视频引用。级联删除 ManyToXxx 关联是没有意义的。如果目标是从三个表中删除所有内容,我只需要 3 个 SQL 查询。
-
我想使用 JPA 删除数据库中的所有内容(所有标签和所有视频)
-
那我只使用 3 个 SQL 查询:
delete from video_tag; delete from video; delete from tag; -
看起来你正在寻找 repoObj.deleteAllInBatch();
标签: java hibernate jpa orm many-to-many