开发者

Hibernate: bi-directional one-to-many with one as parent

开发者 https://www.devze.com 2023-03-19 13:23 出处:网络
I\'m trying to setup a bi-directional one-to-many relationship with \"one\" as parent I have a parent:

I'm trying to setup a bi-directional one-to-many relationship with "one" as parent

I have a parent:

@Entity
public class VideoOnDemand {

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

and a child:

@Entity
public class CuePoint {

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

I used recommendations from the official Hibernate do开发者_StackOverflowcumentation (2.2.5.3.1.1). However, Hibernate doesn't seem to understand that CuePoint is a child entity, so, when I delete the CuePoint, it deletes VideoOnDemand as well with all the other CuePoints.

What am I doing wrong and what is the right way?


By doing that, you'be mapped a unique bidirectional association as two unidirectional associations. One of the side must be marked as the inverse of the other:

@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;
}

The mappedBy attribute must contain the name of the attribute of the other side of the association.

Note that this is indeed what is described at paragraph 2.2.5.3.1.1. of the documentation.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号