[RESOLVIDO] Excluir objeto de coleção

12 respostas
R

Boa tarde Senhores,

Estou com a seguinte dúvida:

Tenho uma classe A, com um relacionamento com uma classe B.

A classe A possui uma List. Quando incluo um objeto B na list da classe A, o hibernate persiste os objetos B normalmente, mas quando excluo algum ítem da list, o hibernate não remove do banco de dados. Existe alguma maneira de fazer isto?

Abraço

12 Respostas

Hebert_Coelho
<blockquote>A a = entityManager.find(A.class, 1);

a.getBs().remove(b);

entityManager.commit();</blockquote>

// basta fazer isso.
R
<blockquote><div class="quote-author">Hebert Coelho:</div><blockquote>A a = entityManager.find(A.class, 1);

a.getBs().remove(b);

entityManager.commit();</blockquote>

// basta fazer isso.</blockquote>

é assim que estou fazendo mesmo, mas sem sucesso… Porém estou usando Session, ao invés de EntityManager… Poderia ser isto?

Hebert_Coelho
<blockquote><div class="quote-author">rodrigomarcelo:</div><blockquote><div class="quote-author">Hebert Coelho:</div><blockquote>A a = entityManager.find(A.class, 1);

a.getBs().remove(b);

entityManager.commit();</blockquote>

// basta fazer isso.</blockquote>

é assim que estou fazendo mesmo, mas sem sucesso… Porém estou usando Session, ao invés de EntityManager… Poderia ser isto?Não. Acho que é mais como você está fazendo.

Pode postar o código?

R
Hebert Coelho:
rodrigomarcelo:
Hebert Coelho:
A a = entityManager.find(A.class, 1); a.getBs().remove(b); entityManager.commit();
// basta fazer isso.

é assim que estou fazendo mesmo, mas sem sucesso... Porém estou usando Session, ao invés de EntityManager... Poderia ser isto?

Não. Acho que é mais como você está fazendo.

Pode postar o código?

Declaração da lista:

...
        
@OneToMany(mappedBy="produto_pa", fetch = FetchType.LAZY)
@Cascade({CascadeType.ALL})
private List<Ficha_Tecnica> ficha_tecnica;

...

Relação na classe B:

...
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="produto_pa")
@Fetch(FetchMode.JOIN)
@Cascade({CascadeType.ALL})
private Produto_Pa produto_pa;
...

Um teste que estou fazendo à parte da aplicação:

Session session = HibernateUtil.getSession();
		
		Produto_Pa pa = (Produto_Pa) session.get(Produto_Pa.class, 1);
		
		pa.getFicha_tecnica().remove(1);
		
		session.saveOrUpdate(pa);
Hebert_Coelho

Deu commit na transação? Alguma mensagem de erro?

R

Sim… commitei, e não apresenta erro o.0

Hebert_Coelho

Sim… commitei, e não apresenta erro o.0Mas pelo que eu vi, você também não iniciou né?

R
Hebert Coelho:
rodrigomarcelo:
Hebert Coelho:
Deu commit na transação? Alguma mensagem de erro?

Sim... commitei, e não apresenta erro o.0

Mas pelo que eu vi, você também não iniciou né?

Iniciei sim, como sempre faço... assim:

public static void main(String[] args) {

		Session session = HibernateUtil.getSession();
		
		session.beginTransaction();
		
		Produto_Pa pa = (Produto_Pa) session.get(Produto_Pa.class, 1);
		
		pa.getFicha_tecnica().remove(1);
		
		session.saveOrUpdate(pa);
		
		session.beginTransaction().commit();
	
	}

Como disse, esse é soh um teste à parte que estou fazendo, pra abstrair a possibilidade de ser na view o problema... Num sei mais o que tentar =/

luksrn
<blockquote><div class="quote-author">rodrigomarcelo:</div><blockquote><div class="quote-author">Hebert Coelho:</div><blockquote>A a = entityManager.find(A.class, 1);

a.getBs().remove(b);

entityManager.commit();</blockquote>

// basta fazer isso.</blockquote>

é assim que estou fazendo mesmo, mas sem sucesso… Porém estou usando Session, ao invés de EntityManager… Poderia ser isto?

Para remover do modo que Hebert Coelho falou tem de definir o método equals e hashcode, você está fazendo isso?

marcelo.silva.java

pa.getFicha_tecnica().remove(1);

isso está certo???

vc não deveria remover o objeto da busca…???pq vc está removendo o indice 1 da collection…??

falow

R
<blockquote><div class="quote-author">luksrn:</div><blockquote><div class="quote-author">rodrigomarcelo:</div><blockquote><div class="quote-author">Hebert Coelho:</div><blockquote>A a = entityManager.find(A.class, 1);

a.getBs().remove(b);

entityManager.commit();</blockquote>

// basta fazer isso.</blockquote>

é assim que estou fazendo mesmo, mas sem sucesso… Porém estou usando Session, ao invés de EntityManager… Poderia ser isto?

Para remover do modo que Hebert Coelho falou tem de definir o método equals e hashcode, você está fazendo isso?

Estou sim!

Consegui a solução!

Por incrível que pareça, o problema estava em uma ou mais bibliotecas do hibernate no meu projeto. Resolvi apagando tudo e baixando a versão mais nova.

Agora estou com uns métodos obsoletos pra trocar, mas isso é o de menos =D

Obrigado Hebert e luksrn pela força. Jah Bless!

Abraço

LucianoTulio

qual hibernate vc está utilizando?

Criado 22 de janeiro de 2013
Ultima resposta 24 de jan. de 2013
Respostas 12
Participantes 5