0

おはようございます。

私はこの問題に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

助けてくれてありがとう。

4

0 に答える 0