У меня есть следующие объекты:Hibernate слияние не удаляет OneToMany старых объектов
Seminar
класс:
@Entity
@Table(name = "seminars")
public class Seminar {
@Id
@GeneratedValue
private int id;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "seminar")
private List<SeminarParticipation> participations;
...
}
SeminarParticipation
класс:
@Entity
@Table(name = "seminar_participations")
public class SeminarParticipation {
@Id
@GeneratedValue
private int id;
@ManyToOne
@JoinColumn(name="seminar_id", nullable=false)
private Seminar seminar;
...
}
В DAO я использую EntityManager для работы с таких семинаров:
em.persist(seminar)
em.merge(seminar)
em.remove(seminar)
При сохранении или удалении Seminar
объектов создаются/удаляются записи в seminar_participations
.
Но когда я пытаюсь обновить семинар (после установки новых List<SeminarParticipation>
участия) с использованием метода merge
, новые записи создаются в соответствии со списком, но старые не удаляются.
Упорно код:
1) код контроллера (я также пытался обновить существующий список, он не работает, а):
seminar.setParticipations(newParticipations);
seminarService.updateSeminar(seminar);
2) Класс обслуживания
@Service
public class SeminarServiceImpl implements SeminarService {
@Autowired
private SeminarDAO seminarDAO;
@Override
public void updateSeminar(Seminar seminar) {
seminarDAO.update(seminar);
}
...
}
3) класс DAO
@Repository
public class SeminarDAOImpl implements SeminarDAO {
@PersistenceContext
private EntityManager em;
@Override
@Transactional
public void update(Seminar seminar) {
em.merge(seminar);
}
...
}
Как я могу решить эту проблему? Есть ли способ, не удаляя их вручную в DAO?
Укажите, что вы хотите удалить? – bmarkham
Ах, подождите, я понимаю, что вы имеете в виду. Вы просто хотите использовать слияние, если хотите обновить. 'persist' и' remove' не нужны. По крайней мере, я думаю, что знаю, чего ты хочешь. Потому что наличие 'persist'' merge' и 'remove' все в одном для одного объекта ... ну, я никогда не видел этого – bmarkham
Извините, я имею в виду только то, что я использую эти методы, а не то, что я вызываю их в этом порядке в один раз :) – Luo