【问题标题】:jpa oneToMany list not updatedjpa oneToMany 列表未更新
【发布时间】:2020-01-22 04:24:49
【问题描述】:

我有两个 Webtoon 课程:

@Entity
@Data
@NoArgsConstructor
public class Webtoon {

    @Id //The unique id of the webtoon. 
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Long id;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy="webtoon", orphanRemoval = true)
    @CollectionTable(name= "list_of_episodes")
    List<Episode> listOfEpisodes = new ArrayList<>();

    @Column(name= "price", unique = false, nullable = false)
    private BigDecimal price;

    private String repositoryGeneratedId;


    /**
     * Add episode in the list
     * @param episode
     */
    public void addEpisode(Episode episode) {
        listOfEpisodes.add(episode);
        episode.setWebtoon(this);
    }

    /**
     * Remove episode in the list
     * @param episode
     */
    public void removeEpisode(Episode episode) {
        listOfEpisodes.remove(episode);
        episode.setWebtoon(null);
    }

    /**
     * Root url where all files are hosted in nexus
     * @return
     */
    @JsonIgnore
    public String getRootUrl() {
        return this.companyId+"/webtoon/webtoon-"+this.repositoryGeneratedId;
    }


}

和剧集

@Entity
@Data
@NoArgsConstructor
public class Episode {

    @Id //The unique id.
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Long id;

    @Column(name= "title", unique = false, nullable = false)
    private String title;

    @Column(name= "description", unique = false, nullable = false)
    private String description;

    @Column(name= "price", unique = false, nullable = false)
    private BigDecimal price;

    @OneToOne(cascade = {CascadeType.ALL}, fetch = FetchType.EAGER)
    private Image icon;

    @OneToOne(cascade = {CascadeType.ALL}, fetch = FetchType.EAGER)
    private Image episodeNexus;

    private String repositoryGeneratedId;

    @JsonIgnore
    @ManyToOne(cascade = {CascadeType.ALL}, fetch = FetchType.EAGER)
    @JoinColumn(name="webtoon_id")
    Webtoon webtoon;




}

这是我的测试:

  1. 我创建了一个网络漫画
  2. 我创建了一集
  3. 使用 addEpisode 在 episodeList 中添加剧集
  4. 创建对象 episodeNexus 并保存所有内容。

在我的 episodeList 中,我创建了该剧集,但 episodeNexus 为 Null。 为什么列表没有自动更新?

当我再次按 ID 获取 webtoon 时,我有正确的列表,其中包含在剧集中创建的项目。

如何在更新剧集后更新我的网络漫画?

【问题讨论】:

标签: spring hibernate spring-boot jpa


【解决方案1】:

在类双向映射中使用单向映射有时会出现问题。 @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) @JoinColumn(name = "foreign-key-name")List<Episode> listOfEpisodes = new ArrayList<>(); 并从 Episode 表中删除 @ManyToOne 注释

【讨论】:

  • 我有一个单一的关系,当我删除一个剧集时会出错,因为我没有对剧集和 Webtoon 之间的关联表进行级联删除
  • 首先告诉我单一关系出现的确切问题......在这里你也可以使用@ManyToMany @ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE }) @JoinTable(name = "episodes_webtom", joinColumns = @JoinColumn(name = "episode_id"), inverseJoinColumns = @JoinColumn(name = "webtom_id")) private List&lt;Episode&gt; episodes = new ArrayList&lt;Episode&gt;();
猜你喜欢
  • 2012-01-16
  • 1970-01-01
  • 2013-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-03
  • 1970-01-01
相关资源
最近更新 更多