2013-05-24 4 views
0

Предположим, у меня есть 2 объекта Java: родительский и дочерний. Отношения между ними: Child -> Parent = many-to-one, то есть число дочерних объектов может быть связано с одним и тем же родителем.Hibernate: каскадное удаление дочерней коллекции

Детский объект имеет ссылку на его родительский промежуток Между тем, родительский объект не имеет поля для обращения к своим детям.

В спящем режиме, который приводит к тому, что элемент «» содержит множество элементов в картировании детей; Сопоставление родителя не содержит запись «один ко многим», поскольку для родительского объекта нет необходимости иметь поле коллекции для ссылки на все его дочерние объекты.

Теперь, когда родитель удален, Oracle создает исключение, которое сущность не может быть удалена, когда есть дочерние объекты, ссылающиеся на нее.

С помощью этой объектной модели существует способ случайного удаления всех дочерних объектов, принадлежащих родительскому объекту, когда последний удаляется?

ответ

1

1> сделать двунаправленное сопоставление с ребенком < -> родитель. укажите каскад delete.

2> Вы знаете, кто является дочерним объектом этого родителя, сначала удалите все дочерние элементы этого родителя, а затем попытайтесь удалить родителя.

EDIT:

проверить этот пример ссылки

Hibernate Bidirectional Example

+0

Дело в том, я не хочу, чтобы ввести новый «детский» поле для родительского объекта просто ради каскадного удаления. – preeze

+0

, чтобы сделать двустороннее отношение корабль отношения, родитель не повторяет детскую референтность. – NPKR

+0

Я проверил, что exmaple перед публикацией этого вопроса. Насколько я могу видеть в этом примере, команда действительно определяет поле «игроки». – preeze

1

Класс Родитель

import java.util.Set; 

    import javax.persistence.*; 

    @Entity 
    @Table(name = "Parent") 
    public class Parent{ 

     @Id 
     @GeneratedValue 
     private Integer id; 

     private String name; 

     @OneToMany(mappedBy="Child", cascade=CascadeType.ALL) 
     private Set<Child> child; 
} 

рассмотрим второй класс с именем ребенка

импорт javax. упорство.*;

@Entity 
@Table(name = "Child") 
public class Child{ 

    @Id 
    @GeneratedValue 
    private Integer id; 

    private String lastname; 

    @ManyToOne 
    @JoinColumn(name = "id") 
    private Parent parent; 
} 

просто внести изменения в вашей Pojo соответствующим образом он не будет бросать исключение

+0

Возможно, мне было не ясно, что родитель не должен содержать поле «Установить детей». Но в вашем примере у него действительно есть это, поэтому это решение не на 100%, что я искал. – preeze

+0

, чтобы воплотить много разных отношений, которые вам нужно сделать таким образом –

Смежные вопросы