2015-09-07 4 views
1

У меня странная вещь, происходящая в моем коде.Hibernate: session.merge делает вставку вместо обновления?

Я использовал session.merge, который при обновлении основной таблицы должен обновлять дочернюю таблицу. Но для меня После того, как мастер-таблица обновлена ​​в моей дочерней таблице, создается новая запись, которую мне нужно решить. Пожалуйста, направляйте. Где может быть проблема ?. Это может быть файл Entity?

Пожалуйста, найдите нижеприведенный код.

public void update(List print) throws DataAccessException { 
     try { 
      if (print != null && print.size() > 0) 
       for (Object object : print) { 
        entityManager.merge(object); 
       } 
     } catch (HibernateException e) { 
      throw new DataAccessException("HibernateException"); 
     } 
    } 
+0

Является ли это постоянным объектом? Имеет ли он действительный 'id'? – meskobalazs

+0

Да Печать - это постоянный объект (ссылка на главную таблицу), и вместе с ним у меня есть дочерняя таблица, которую необходимо обновить. – Luxy

+1

Не могли бы вы добавить соответствующие классы сущностей? – meskobalazs

ответ

1

Я смог решить проблему. Я решил это, добавив свойство orphanRemoval моей переменной. Поскольку не было свойства orphanRemoval, он не удалял более ранние, и поэтому я получал неправильные данные в своем приложении. Ниже приведен скорректированный код.

@OneToMany(mappedBy = "printColor", fetch = FetchType.LAZY, cascade= {CascadeType.ALL}, orphanRemoval=true) 
private Set<PrintColorFormatter> printColorSets; 
Смежные вопросы