gpt4 book ai didi

java - hibernate一对多将子对象与父关系分离

转载 作者:行者123 更新时间:2023-12-01 11:11:47 28 4
gpt4 key购买 nike

每当我创建电影时,我有两个具有一对多关系的实体电影(父)和剧集(子)包含 episode 对象集合的对象,一切正常,父对象和相关子对象已创建。但是,当我尝试通过删除一堆“剧集”对象来更新“电影”时,似乎没有任何效果

这就是我想要做的,当我从film中删除一堆episode对象时,这些删除的对象不应被删除而应保留为剧集没有链接到任何父对象。这可能吗?

电影实体

    import org.hibernate.annotations.*;

import javax.persistence.*;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.Set;

@Entity
@Table(name = "FILM")
@Getter
@Setter
public class Film {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;

@Column(name = "ORIGINAL_TITLE", nullable = false)
private String originalTitle;


@OneToMany(targetEntity=FilmEpisode.class, mappedBy="film", cascade=CascadeType.ALL,fetch=FetchType.EAGER, orphanRemoval = true)
private Set<FilmEpisode> filmEpisodes;

@Column(name = "SHOW_ON_LANDING_PAGE")
private Boolean showOnLandingPage;
}

FilmEpisode 实体

    import javax.persistence.*;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.Set;

@Entity
@Table(name = "FILM_EPISODE")
@Getter
@Setter
public class FilmEpisode {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;

@Column(name = "ORIGINAL_TITLE", nullable = false)
private String originalTitle;

@ManyToOne
@JoinColumn(name = "FILM_ID")
private Film film;
}

在 DAO 中,我只是使用 saveOrUpdate 方法保存 film,如下所示

session.saveOrUpdate(film);

我错过了什么吗??

最佳答案

orphanRemoval = true 正在删除父实体中未引用的实体。将其更改为orphanRemoval = false,子实体将不会从数据库中删除。您也可以删除它,因为它默认为 false:

关于java - hibernate一对多将子对象与父关系分离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32269359/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com