AJUDA (URGENTE) Mapeamentos 1..N. Removendo um item da lista. Como fazer?

0 respostas
B

Olá pessoal.

Estou usando JPA/Hibernate na minha aplicação, e ja tenho bastante coisa pronta… e agora to com um duvida, e nao sei se o comportamento do Hibernate ta certo ou nao.

Bom, tenho as classes abaixo:

Classe Atividade

@Entity
public class Atividade implements java.io.Serializable        
{
    public boolean addExecucao(ExecucaoAtividade execucao)
    {
        if ( ! this.execucoes.add(execucao) )
        {
            return ( false );
        }
        
        execucao.setAtividade( this );
        
        return ( true );
    }
    
    public Set<ExecucaoAtividade> getExecucoes()
    {
        return execucoes;
    }

    public void setExecucoes(Set<ExecucaoAtividade> execucoes)
    {
        this.execucoes = execucoes;
        setAtividadeEmExecucoes( this.execucoes );
    }

    public Long getId()
    {
        return id;
    }

    public void setId(Long id)
    {
        this.id = id;
    }
    
    // metodos protegidos
    protected void setAtividadeEmExecucoes(Collection<ExecucaoAtividade> execucoes)
    {
        for ( ExecucaoAtividade execucao : execucoes )
        {
            execucao.setAtividade( this );
        }
    }

    // Atributos

    @Id   
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;
   
    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER, mappedBy="atividade")
    private Set<ExecucaoAtividade> execucoes = new HashSet<ExecucaoAtividade>();    
}

Classe ExecucaoAtividade

@Entity
public class ExecucaoAtividade implements Serializable
{
    public Atividade getAtividade()
    {
        return atividade;
    }

    public void setAtividade(Atividade atividade)
    {
        this.atividade = atividade;
    }

    public Long getId()
    {
        return id;
    }

    public void setId(Long id)
    {
        this.id = id;
    }
    
    // Atributos

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;
    
    @ManyToOne(optional=false)
    @JoinColumn    
    private Atividade atividade;        
}

As classe possuem varios outros atributos e metodos, mas o importante para a minha duvida ta aí em cima.

Bom, eu tenho a classe AtividadeDAO que faz a persistencia dos dados de Atividade corretamente. Nela, eu tenho um metodo persistir e outro atualizar.
Olhem o caso abaixo:

Tenho ja no banco de dados, uma atividade cadastrada com o ID = 1, e essa atividade ja possui algumas execuções relacionadas.

A minha duvida é:
Com o código abaixo, a execução que foi encontrada no for, deverá ser removida do banco de dados tb?

//..
        Atividade atividade = AtividadeDAO.getInstance().findById(
                Atividade.class, 1);
        
        if ( null == atividade )
        {
            System.out.println( "Nao encontrada" );
            return;
        }
        
        ExecucaoAtividade exeucao = null;
        
        for ( ExecucaoAtividade e : atividade.getExecucoes() )
        {
            exeucao = e;
            break;
        }
        
        if ( ! atividade.getExecucoes().remove( exeucao ) )
        {
            System.out.println( "Nao removeu" );
        }
                
        try
        {
            AtividadeDAO.getInstance().atualizar(atividade);
        }
        catch( Exception e )
        {
            System.out.println( e );
            return;
        }
//..

Se a resposta for sim, me ajudem, pq nao está funcionando.
Se a resposta for não, me ajudem tb, pq para mim, era para remover direto, sendo que essa estrutura é como se fosse uma Venda - ItemVenda. E quando vc remove um item de uma venda, ele deve ser deletado.

VLW

Criado 26 de outubro de 2008
Respostas 0
Participantes 1