5

「1」を親として双方向の1対多の関係を設定しようとしています

私には親がいます:

@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 と共に削除されます。

私は何を間違っており、正しい方法は何ですか?

4

1 に答える 1

7

これにより、固有の双方向関連が 2 つの単方向関連としてマップされます。一方の側は、もう一方の逆としてマークする必要があります。

@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 で説明されていることに注意してください。ドキュメントの。

于 2011-07-09T08:41:11.617 に答える