Hibernate: двунаправленный один-ко-многим с одним в качестве родителя - PullRequest
5 голосов
/ 09 июля 2011

Я пытаюсь установить двунаправленное отношение «один ко многим» с «одним» в качестве родителя

У меня есть родитель:

@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.правильный путь?

1 Ответ

7 голосов
/ 09 июля 2011

Таким образом, вы отобразите уникальную двунаправленную ассоциацию как две однонаправленные ассоциации. Одна сторона должна быть помечена как обратная другой:

@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. документации.

...