我正在尝试以“一个”为父级建立双向一对多关系
我有一个父:
@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。
我在做什么错,正确的方法是什么?
这样,您就可以将一个唯一的双向关联映射为两个单向关联。一侧必须标记为另一侧的反面:
@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属性必须包含关联另一侧的属性的名称。
mappedBy
请注意,这确实是第2.2.5.3.1.1段中描述的内容。文档。