[RESOLVIDO]Delete Hibernate não funciona

10 respostas
darksteel3000

Olá galera, a situação é o seguinte, tenho uma classe pessoa e uma classe disciplinas, todas as duas possuem suas respectivas tabelas no banco. Dai essa pessoa pode ser aluno ou professor, em consequencia de que tem uma tabela no banco de matricula q tem 2 foreign keys, uma de pessoa(pessoa.cpf) e outra da disciplina(disciplina.codDisciplina).

Dai fiz um gui simples pra entrar com o cod da disciplina, e o cpf do aluno q a cursará(q sao so esses 2 campos no banco (lembrando sao chave composta (Duas foreign keys))), e fiz 2 metodos, um pra inserir, e outro pra remover, dai o inserir ta indo blza, mais o remover, diz a seguinte mensagem:

Já coloquei um JOptionPane pra mostrar o objketo antes de passalo pro metodo, e naum esta vazio;

10 Respostas

romarcio

Estranho esse erro, a mensagem é como se estivesse divergência no tipo de dados.

Esse objeto que vc tenta excluir está indo para o evento delete com o ID?

darksteel3000

Olá amigo, ve bem a tabela q tou mandando os dados contem somente 2 campos varchar, um pro cpf e um pro codigo da disciplina os 2 são foreign keys de chaves primarias, e na minha classe de CadMatriculas, tem 2 atributos correspondentes aos do banco. O incrivel e que insere numa boa, e pra deletar estou passando o objeto como um todo, ja tentei passar so o cpf do aluno e tbem não pegou. Pena que não da pra mostrar o codigo pq fica la no meu estagio e naum poss oretirar de la, podes me dar uma luz? Abração !!!

alexfe
Tentou dessas formas ?

session.CreateQuery("delete fom Classe where cpf = "+cpf+" and codDisc = "+cod).executeUpadate;

ou 

session.remove(Object);
darksteel3000

Ola amigo, essa createQuery ainda não, mais a outra e a que uso pra todos q faço com hibernate, masi q é ate uma boa tentar a de cima, pq eu fui no banco e exclui desse jeitinho ai, e foi tranquilo com o sql. Vou tentar amanha ( ops no caso hj hehe ), e aviso aqui ok !!!

Abração !!!

alexfe

então, porque se vc passar o objeto para a sessão, session.remove(object);

dependendo de como estão anotadas suas classes, o hibernate pode tentar remover em cascata, o que pode ocasionar erros.

usando o
session.CreateQuery("delete fom Classe where cpf = "+cpf+" and codDisc = "+cod).executeUpadate;

vc especifica exatamente o que vc quer fazer dentro do banco de dados.

mas para o hibernate vc não usa SQL, vc usa a linguagem propria do Hibernate que é o HQL.

olha a diferenca.

HQL  --- > session.CreateQuery("delete fom Classe where cpf = "+cpf+" and codDisc = "+cod).executeUpadate;  

SQL ---->session.CreateSQL("delete * fom Classe where cpf = "+cpf+" and codDisc = "+cod);
darksteel3000

Humm, to lgdo, vou tentar, e realmente, especificando seria bem melhor !!!

Abração, depois digo a resposta !!!

alexfe

Vou te ajudar um pouquinho

Retornando um objeto:
session.createQuery("from Disciplina where codId = "+cod).uniqueResult();

Retornando uma lista:
session.createQuery("from Disciplina ").List();

e assim por diante…

Atenção --> na linguagem HQL deve-se usar os nomes das classes e dos atributos como estão escritos nas classes. Se na classe for maiusculo no HQL também deve ser maiusculo.

darksteel3000

O meu patrão, vlw mermo pelas dicas ja anotei hehe !!!

Abração !!!

darksteel3000

Kra pegou tranquilão, passando o hql, vlw mesmo aew, Abração !!!

alexfe

Ok Sucesso t++

Criado 8 de fevereiro de 2011
Ultima resposta 9 de fev. de 2011
Respostas 10
Participantes 3