我有以下实体:
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 中手动删除它们?