好吧,我遇到了麻烦,我找不到任何关于它的问题。我有一个与另一个实体具有 OneToMany 关系的实体。我尝试从一个人的列表中删除“另一个”。之后,我尝试合并那个。但它只是行不通。我不想从数据库中删除“另一个”,我只想从一个列表中删除它。
这是我的代码:
public class ParametrosVingentes implements Serializable {
// ...
@OneToMany(targetEntity=AgendamentoImportacaoZeus.class, cascade={CascadeType.REFRESH, CascadeType.MERGE})
@JoinTable(
name="ImportacaoZeusVingentes",
joinColumns = @JoinColumn(name="parametros_vingentes_fk"),
inverseJoinColumns = @JoinColumn(name="agendamento_fk")
)
private List<AgendamentoImportacaoZeus> agendamentosImportacaoZeus;
// ...
}
AgendamentoImportacaoZeus 是“另一个”实体。
@Entity
@NamedQueries(value = {
@NamedQuery(name = "AgendamentoImportacaoZeus.listarPorDataCriacao", query = "SELECT a FROM AgendamentoImportacaoZeus a ORDER BY a.dataCriacao DESC"),
@NamedQuery(name="AgendamentoImportacaoZeus.getPorData", query="SELECT a FROM AgendamentoImportacaoZeus a WHERE a.agendamento = :data"),
@NamedQuery(name="AgendamentoImportacaoZeus.vingentes", query="SELECT ag FROM ParametrosVingentes p JOIN p.agendamentosImportacaoZeus ag WHERE p.id = :id")
})
@SequenceGenerator(name = "SEQ", sequenceName = "SEQ_AG_IMP_ZEUS")
public class AgendamentoImportacaoZeus implements Serializable, Agendamento {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="SEQ")
private Long id;
@Temporal(javax.persistence.TemporalType.TIMESTAMP)
private Date dataCriacao;
@Temporal(javax.persistence.TemporalType.TIMESTAMP)
private Date agendamento;
// ...
合并实体的代码:
ParametrosVingentes parametrosVingentes = parametrosVingentesDao.buscar(ParametrosVingentes.ID);
List<? extends Agendamento> agendamentosVingentes;
// ...
agendamentosVingentes = parametrosVingentes.getAgendamentosImportacaoZeus();
// ...
for(int i=0; i<agendamentosVingentes.size(); i++){
if(agendamentosVingentes.get(i).getAgendamento().compareTo(dataAgendamentoDesmarcar) == 0){
agendamentosVingentes.remove(i);
break;
}
}
// ...
entityManager.merge(parametrosVingentes);
从集合中删除实体并合并它应该删除关系,还是不应该?
我调试了代码,合并后,我有没有我删除的元素的 AgendamentoImportacaoZeus 列表。但是当我从数据库中获取 ParametrosVingentes 时,它又出现了。
entityManager 由 Spring 控制。该方法是事务性的。然后我认为它正在正常冲洗。
感谢关注。
更新:
我查看了这篇文章并尝试更改我的映射。现在我有以下内容:
@Entity
public class ParametrosVingentes implements Serializable {
// ...
@OneToMany(mappedBy="parametrosVingentes", cascade={CascadeType.ALL})
private List<AgendamentoImportacaoZeus> agendamentosImportacaoZeus;
// ...
}
@Entity
@NamedQueries(value = {
@NamedQuery(name = "AgendamentoImportacaoZeus.listarPorDataCriacao", query = "SELECT a FROM AgendamentoImportacaoZeus a ORDER BY a.dataCriacao DESC"),
@NamedQuery(name="AgendamentoImportacaoZeus.getPorData", query="SELECT a FROM AgendamentoImportacaoZeus a WHERE a.agendamento = :data"),
@NamedQuery(name="AgendamentoImportacaoZeus.vingentes", query="SELECT ag FROM ParametrosVingentes p JOIN p.agendamentosImportacaoZeus ag WHERE p.id = :id")
})
@SequenceGenerator(name = "SEQ", sequenceName = "SEQ_AG_IMP_ZEUS")
public class AgendamentoImportacaoZeus implements Serializable, Agendamento {
// ...
private ParametrosVingentes parametrosVingentes;
// ...
}
我正在尝试这个:
Agendamento agendamento = null;
for(int i=0; i<agendamentosVingentes.size(); i++){
if(agendamentosVingentes.get(i).getAgendamento().compareTo(dataAgendamentoDesmarcar) == 0){
agendamento = agendamentosVingentes.remove(i);
agendamento.setParametrosVingentes(null);
break;
}
}
entityManager.merge(parametrosVingentes);
entityManager.merge(agendamento);
有人知道为什么不更新吗?