Delete no hibernate

3 respostas
sandro.csimas

Pessoal, tenho uma classe funcionario que possui uma lista de pontos

Funcionario:

@OneToMany(mappedBy="funcionario", fetch=FetchType.EAGER)
	@Cascade(CascadeType.ALL)
	private List<Ponto> pontos = new ArrayList<Ponto>();

Ponto:

@ManyToOne(fetch=FetchType.LAZY)
	@JoinColumn(name="id_funcionario", nullable=false)
	@Fetch(FetchMode.SELECT)
	@Cascade(CascadeType.ALL)
	private Funcionario funcionario;

Quero remover apenas um ponto do funcionario… este eh o que seleciono no meu datatable em jsf
aqui esta o codigo:

public String removerPonto(){
		Ponto ponto = (Ponto) dataObjPonto.getRowData();
		Funcionario funcionario = ponto.getFuncionario();

		System.out.println(ponto.getId());
		System.out.println(ponto.getFuncionario().getNome());
		
		PontoDAO pontoDAO = new PontoDAO();			
		pontoDAO.remove(ponto);

		funcionario.getPontos().remove(ponto);

		if(funcionario.getQtPontos() > 4)
			funcionario.setDivida((funcionario.getPontos().size() - 4)*2.50d);
		else
			funcionario.setDivida(0d);


		FuncionarioDAO funcionarioDAO = new FuncionarioDAO();
		funcionarioDAO.save(funcionario);
		HibernateUtil.closeSession();
		return null;		
	}

O Problema esta o delete do PONTODAO( pontoDAO.remove(ponto); )
ele esta deletando todos os pontos do usuairio, causando inconsistencia.
eu passo o ponto certo, com a id certa
porem ele esta fazendo varios deletes ao invez de um.
alguem sabe como resolvo isso ?

aqui esta a query gerada:

Hibernate: 
    delete 
    from
        tb_pontos_ponto 
    where
        id=?
Hibernate: 
    delete 
    from
        tb_pontos_ponto 
    where
        id=?
Hibernate: 
    delete 
    from
        tb_pontos_ponto 
    where
        id=?
Hibernate: 
    delete 
    from
        tb_pontos_quadropontos 
    where
        id=?
Hibernate: 
    delete 
    from
        tb_pontos_funcionario 
    where
        id=?

3 Respostas

sandro.csimas

E ainda esta fazendo o delete do funcionario e de outra tabela que tenho aqui, associada com funcionario

# Hibernate:   
#     delete   
#     from  
#         tb_pontos_ponto   
#     where  
#         id=?  
# Hibernate:   
#     delete   
#     from  
#         tb_pontos_quadropontos   
#     where  
#         id=?  
# Hibernate:   
#     delete   
#     from  
#         tb_pontos_funcionario   
#     where  
#         id=?
sandro.csimas

Quando tiro o Cascade da classe Pontos no atributo funcionario, é gerado este erro

org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations): [entidades.Ponto#35]

sandro.csimas

Consegui galeraaaa
soh fiz trocar uma linha de lugar, viajei legal

Depois:

funcionario.getPontos().remove(ponto);
		
		PontoDAO pontoDAO = new PontoDAO();			
		pontoDAO.remove(ponto);

Antes:

PontoDAO pontoDAO = new PontoDAO();			
		pontoDAO.remove(ponto);

                funcionario.getPontos().remove(ponto);
Criado 3 de abril de 2010
Ultima resposta 3 de abr. de 2010
Respostas 3
Participantes 1