2015-08-28 1 views
0

У меня есть 2 сущностей film (Parent) и episode (ребенка) с один-ко-многим, когда я создаю film объект с коллекцией episode объектов, все работает нормальный, родительский и связанные дочерние объекты. Но когда я пытаюсь обновить `фильм», удалив букет из „эпизода“ объекты ничего не похоже на работу иззимовать один-ко-многим объекта открепление ребенка от родительских отношений

Вот что я пытаюсь сделать, когда я удалить кучу episode объектов из film, эти удаленные объекты должны не удаляется , но сохраняется как эпизод без привязки к любому родительскому объекту. Это возможно?

Film объект

import org.hibernate.annotations.*; 

    import javax.persistence.*; 
    import javax.persistence.CascadeType; 
    import javax.persistence.Entity; 
    import javax.persistence.Table; 
    import java.util.Set; 

    @Entity 
    @Table(name = "FILM") 
    @Getter 
    @Setter 
    public class Film { 
     @Id 
     @GeneratedValue(strategy = GenerationType.IDENTITY) 
     private long id; 

     @Column(name = "ORIGINAL_TITLE", nullable = false) 
     private String originalTitle; 


     @OneToMany(targetEntity=FilmEpisode.class, mappedBy="film", cascade=CascadeType.ALL,fetch=FetchType.EAGER, orphanRemoval = true) 
     private Set<FilmEpisode> filmEpisodes; 

     @Column(name = "SHOW_ON_LANDING_PAGE") 
     private Boolean showOnLandingPage; 
    } 

FilmEpisode объект

import javax.persistence.*; 
    import javax.persistence.CascadeType; 
    import javax.persistence.Entity; 
    import javax.persistence.Table; 
    import java.util.Set; 

    @Entity 
    @Table(name = "FILM_EPISODE") 
    @Getter 
    @Setter 
    public class FilmEpisode { 
     @Id 
     @GeneratedValue(strategy = GenerationType.IDENTITY) 
     private long id; 

     @Column(name = "ORIGINAL_TITLE", nullable = false) 
     private String originalTitle; 

     @ManyToOne 
     @JoinColumn(name = "FILM_ID") 
     private Film film; 
    } 

В DAO я просто экономия film с saveOrUpdate способом, как показано ниже

session.saveOrUpdate(film); 

Я что-то не хватает .. ??

ответ

1

orphanRemoval = true Производит исключенные объекты из родительского объекта, удаляемого. Измените его на orphanRemoval = false, а дочерние сущности не будут удалены из базы данных. Вы также можете удалить его, так как по умолчанию он равен false:

+0

Да, я пробовал, что дочерние объекты, удаленные из коллекции, не обновляются. Поэтому попытался проверить, предоставив 'orphanRemoval = true', даже если это не сработало, не удалось удалить записи для детей. – Amit

+0

Если у вас двунаправленные сопоставления, я считаю, что вам нужно удалить отношение с обеих сторон. –

+0

Итак, вам нужно удалить «Фильм» со стороны «Эпизода». –

0

В .NET У меня была такая же проблема, чтобы исключить ребенка. Я решил провести сеанс от родителя и затем установить слияние в сеансе.

Использование:

Map Parent

HasMany(x => x.Child) .KeyColumn("id") .AllDeleteOrphan();

О методе Update:

public void Update(Parent model) 
{ 
    var session = _sessionFactory.GetCurrentSession(); 

    using (var transaction = session.BeginTransaction()) 
    { 
     session.Load<Parent>(model.Id); 
     session.Merge(model); 
     transaction.Commit(); 
    } 
} 

Чтобы загрузить список в .load в базе данных, возвращается три строки, и последний объект в методе имеет только 2 строки. Создание .Commit, строка, которую я удалил, был удален из базы данных.

+0

Есть ли у вас образец кода? –

+0

Хорошо, код обновлен. –

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