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