おはようございます。
私はこの問題に2日間苦労しています。ここに私のモデルがあります:
親 :
@Entity
@Table(name="BANDEIRA")
@SequenceGenerator(name = "SQ_BAND_SQ_BANDEIRA", sequenceName = "SQ_BAND_SQ_BANDEIRA", allocationSize = 1)
public class Bandeira extends AbstractEntidade implements Serializable {
...
private List<ObservacaoBandeira> itensObservacao = new ArrayList<ObservacaoBandeira>();
...
@OneToMany(cascade = CascadeType.ALL,
fetch = FetchType.LAZY,
mappedBy = "bandeira" )
@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
public List<ObservacaoBandeira> getItensObservacao() {
return itensObservacao;
}
}
子 :
@Entity
@Table(name = "OBSERVACAO_BANDEIRA")
@SequenceGenerator(name = "SQ_OBBA_SQ_OBSERVACAO", sequenceName = "SQ_OBBA_SQ_OBSERVACAO", allocationSize = 1)
@DiscriminatorColumn(name=ObservacaoBandeira.OBSERVACAO_BANDEIRA_TIPO)
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorValue(ObservacaoBandeira.BANDEIRA)
public class ObservacaoBandeira extends AbstractEntidade implements Serializable {
static final String BANDEIRA = "0"; // ObservacaoBandeiraTipo.BANDEIRA;
static final String OBSERVACAO_BANDEIRA_TIPO = "OBBA_IN_TIPO_OBSERV_BANDEIRA";
private static final long serialVersionUID = -2835835990963971955L;
private Long idObservacaoBandeira;
private String observacao;
private **Bandeira bandeira**;
private ObservacaoBandeiraTipo observacaoBandeiraTipo;
....
@ManyToOne
@JoinColumn(name = "BAND_SQ_BANDEIRA", nullable = false)
public Bandeira getBandeira() {
return bandeira;
}
@Entity
@DiscriminatorValue(ObservacaoMovimentacaoDuto.MOVIMENTACAO_MISTURA_ORGAO)
@Table(name = "OBSERVACAO_MOVIMENTACAO_DUTO")
public class ObservacaoMovimentacaoDuto extends ObservacaoBandeira implements Serializable {
private static final long serialVersionUID = 6781122676850797573L;
static final String MOVIMENTACAO_MISTURA_ORGAO = "2";
private MovimentacaoDuto movimentacaoDuto;
public ObservacaoMovimentacaoDuto() {
super(ObservacaoBandeiraTipo.MOVIMENTACAO_MISTURA_ORGAO);
}
public ObservacaoMovimentacaoDuto(Bandeira bandeira, MovimentacaoDuto movimentacaoDuto, String observacao) {
super(ObservacaoBandeiraTipo.MOVIMENTACAO_MISTURA_ORGAO, bandeira, observacao);
this.movimentacaoDuto = movimentacaoDuto;
}
@OneToOne
@JoinColumn(name = "MODU_SQ_MOVIMENTACAO_DUTO", nullable = false)
public MovimentacaoDuto getMovimentacaoDuto() {
return movimentacaoDuto;
}
public void setMovimentacaoDuto(MovimentacaoDuto movimentacaoDuto) {
this.movimentacaoDuto = movimentacaoDuto;
}
}
Bandeira エンティティから「ObservacaoMovimentacaoDuto」を削除しようとしています。
考えられるすべての既知の方法を試しました(少なくとも私は)。
- コレクションから削除するだけ
- コレクションからの削除と entityManager.remove() の呼び出し
- コレクションから削除し、親エンティティを null に設定してから、entityManager.remove() を呼び出して削除します。
- コレクションから削除し、親を null に設定してから、親エンティティを永続化します
コントローラーでの私の最新のコードは次のとおりです。
public void removerObsBandeira(ActionEvent event) {
ObservacaoBandeira obs = (ObservacaoBandeira) event.getComponent().getAttributes().get("obs");
ObservacaoBandeira obsToDelete = servico.findById(new ObservacaoBandeira() , obs.getIdObservacaoBandeira());
Bandeira bandeira = obsToDelete.getBandeira();
bandeira.getItensObservacao().remove(obsToDelete);
//obsToDelete.setBandeira(null);
servico.remover(obsToDelete);
//servico.remover(obsToDelete);
//obs = servico.persistir(obs);
//servico.remover(obs);
servico.atualizar();
this.cenarioSelecionado.getBandeira().getItensObservacao().remove(obsToDelete);
}
その他の関連情報:
- 春 2.5.x
- JPA1.0
- 休止状態 3.3.2.GA
- アプリケーション サーバー Weblogic 11
助けてくれてありがとう。