小编典典

休眠:双向一对多,其中一对作为父级

hibernate

我正在尝试以“一个”为父级建立双向一对多关系

我有一个父:

@Entity
public class VideoOnDemand {

   @OneToMany(cascade = CascadeType.ALL)
   @LazyCollection(LazyCollectionOption.FALSE)
   @JoinColumn(name = "video_id")
   private List<CuePoint> cuePoints = new ArrayList<CuePoint>();
}

和一个子:

@Entity
public class CuePoint {

   @ManyToOne(cascade=CascadeType.ALL)
   @JoinColumn(name = "video_id", insertable = false, updatable = false)
   private VideoOnDemand video;
}

我使用了Hibernate官方文档(2.2.5.3.1.1)中的建议。但是,Hibernate似乎并不了解CuePoint是一个子实体,因此,当我删除CuePoint时,它也会删除VideoOnDemand以及所有其他CuePoints。

我在做什么错,正确的方法是什么?


阅读 257

收藏
2020-06-20

共1个答案

小编典典

这样,您就可以将一个唯一的双向关联映射为两个单向关联。一侧必须标记为另一侧的反面:

@Entity
public class VideoOnDemand {

   @OneToMany(mappedBy = "video", cascade = CascadeType.ALL)
   private List<CuePoint> cuePoints = new ArrayList<CuePoint>();
}

@Entity
public class CuePoint {

   @ManyToOne(cascade = CascadeType.ALL)
   @JoinColumn(name = "video_id", insertable = false, updatable = false)
   private VideoOnDemand video;
}

mappedBy属性必须包含关联另一侧的属性的名称。

请注意,这确实是第2.2.5.3.1.1段中描述的内容。文档。

2020-06-20