我的模型中有一对多关系。有两个实体,紧急情况和工作人员(工作人员可以参加许多紧急情况,反之亦然)。负责该关系的代码部分如下所示:
@JoinTable(name = "CREWS_ON_EMERGENCIES", joinColumns = {
@JoinColumn(name = "EMERGENCY_ID", referencedColumnName = "EMERGENCY_ID", nullable = false)}, inverseJoinColumns = {
@JoinColumn(name = "CREW_ID", referencedColumnName = "CREW_ID", nullable = false)})
@ManyToMany(fetch= FetchType.EAGER)
private Collection<Crew> crewList;
和
@ManyToMany(mappedBy="crewList", fetch= FetchType.EAGER)
private Collection<Emergency> emergencyList;
Crew是一个依赖实体 - 当我添加新的紧急情况时,会更新 emergencyList ,其中包括参加过的船员名单。
实际上,数据库更新正常,并且在事务关闭后立即在CREWS_ON_EMERGENCIES表中显示新记录。但是,如果添加新的紧急情况然后显示他们参加的所有工作人员和紧急事件的列表,则不会显示最后的紧急情况(显然,“emergencyList”已过期)。它仅在我重新启动服务器(Tomcat)或处于调试模式时出现。
紧急保存()代码:
@Transactional
public void save(Emergency e) {
entityManager.persist(e);
entityManager.flush();
}
Spring MVC将自动将选定的工作人员添加到集合crewList中。
有谁知道为什么它会以这样的方式发生,解决方案是什么?
答案 0 :(得分:1)
我在这里看到两个潜在的问题:
旁注:当我看到EAGER用于多对多关联的两边时,我立即想到:“这个应用程序会慢得多”。紧急情况的负载将加载其所有的工作人员,这将加载所有紧急情况,这将加载所有他们的工作人员...递归。你可以像这样加载一半的数据库。