Hibernate JPA-如何在一家公司中只删除关系?

Hibernate JPA-如何在一家公司中只删除关系?,hibernate,jpa,one-to-many,relationship,Hibernate,Jpa,One To Many,Relationship,嗯,我有麻烦了,我找不到任何问题。 我有一个实体与另一个实体有着一对一的关系。我试着从“另一个”的列表中删除“另一个”。在那之后,我试着合并那个。但它就是不起作用。 我不想从数据库中删除“另一个”,我只想从“一个”列表中删除它 这是我的代码: public class ParametrosVingentes implements Serializable { // ... @OneToMany(targetEntity=AgendamentoImportacaoZeus.cla

嗯,我有麻烦了,我找不到任何问题。 我有一个实体与另一个实体有着一对一的关系。我试着从“另一个”的列表中删除“另一个”。在那之后,我试着合并那个。但它就是不起作用。 我不想从数据库中删除“另一个”,我只想从“一个”列表中删除它

这是我的代码:

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;

    // ...

}
合并实体的代码:

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);
ParametrosVingentes ParametrosVingentes=parametrosVingentesDao.buscar(ParametrosVingentes.ID);

列表如果处理附加的实体,甚至不必合并。你确定getter没有返回列表的副本,而是返回列表吗?你能展示你的真实代码吗,因为如果你从你正在迭代的列表中删除一个元素,上面的代码会抛出ConcurrentModificationException。我没有发布的循环有一个“中断”。我会更新代码。我想你的问题已经回答了。请发布其他实体(AgendamentoImportacaoZeus)的代码。
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);
@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);