Hibernate 合并不会删除 OneToMany 旧实体

2024-01-04

我有以下实体:

Seminar class:

@Entity
@Table(name = "seminars")
public class Seminar {

    @Id
    @GeneratedValue
    private int id;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "seminar")
    private List<SeminarParticipation> participations;
...
}

SeminarParticipation class:

@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 中手动删除它们?


你应该尝试使用孤儿移除 = true http://www.objectdb.com/api/java/jpa/OneToMany/orphanRemoval@OneToMany 的参数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hibernate 合并不会删除 OneToMany 旧实体 的相关文章

随机推荐