0

好吧,我遇到了麻烦,我找不到任何关于它的问题。我有一个与另一个实体具有 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);

有人知道为什么不更新吗?

4

0 回答 0