さて、私は困っていて、それについての質問が見つかりません。別のエンティティと OneToMany 関係を持つエンティティがあります。'another' を one's List から削除してみました。その後、それをマージしてみました。しかし、それはうまくいきません。データベースから「別の」を削除したくありません。リストから削除したいだけです。
これは私のコードです:
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);
コレクションからエンティティを削除してマージすると、RELATIONSHIP が削除されますか?
コードをデバッグし、マージ後、削除した要素のない 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);
なぜ更新されないのか誰か知っていますか?