[RESOLVIDO] Excluir objeto de coleção

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

[quote]A a = entityManager.find(A.class, 1);
a.getBs().remove(b);
entityManager.commit();[/quote]
// basta fazer isso.

[quote=Hebert Coelho][quote]A a = entityManager.find(A.class, 1);
a.getBs().remove(b);
entityManager.commit();[/quote]
// basta fazer isso.[/quote]

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

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

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

Pode postar o código?

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

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

Pode postar o código?[/quote]

Declaração da lista:

[code]…

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

…[/code]

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:

[code] Session session = HibernateUtil.getSession();

	Produto_Pa pa = (Produto_Pa) session.get(Produto_Pa.class, 1);
	
	pa.getFicha_tecnica().remove(1);
	
	session.saveOrUpdate(pa);[/code]

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

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

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

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

Iniciei sim, como sempre faço… assim:

[code] 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();

}[/code]

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 =/

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

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

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

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

[quote=luksrn][quote=rodrigomarcelo][quote=Hebert Coelho][quote]A a = entityManager.find(A.class, 1);
a.getBs().remove(b);
entityManager.commit();[/quote]
// basta fazer isso.[/quote]

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

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

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

qual hibernate vc está utilizando?