Dúvida Hibernate

8 respostas
maranata

Prezados (as),

Tenho a seguinte situação de erro, onde o Hibernate insere, mas ao atualizar dá erro:

Hibernate: insert into MD_ACESSO_CONSOLIDADO (MSISDN, DESC_APLICACAO, DESC_PAGINA, DESC_COMPONENTE, ID_ACESSO) values (?, ?, ?, ?, ?)
Hibernate: update MD_APLICACAO set DESC_APLICACAO=?, control=?, url=?, publicada=?, ID_PAGINA_INICIAL=? where ID_APLICACAO=?
java.lang.ClassCastException: java.lang.Boolean cannot be cast to java.lang.String
...

Estou salvando no BD da seguinte forma:

Transaction transaction = session.beginTransaction();
session.save(acesso);
transaction.commit();
session.close();

O CURIOSO é que quando comento a transação e deixo apenas session.save(acesso); o erro não ocorre, mas também não salva no BD.

Abçs.

8 Respostas

rdgms

Isso ai é problema de cast… posta com mais detalhe oque você está fazendo…

maranata

Olá rdgms,

Foi o que eu imaginei a princípio. Porém o erro começou a ocorrer após retirar a estratégia de cahe dos arquivos de mapeamento das classes persistentes. A estratégia de cache estava definida como read-only.

Abçs.

leo_mf

Como é a classe do objeto que você esta mexendo?

rdgms

Se ele conseguiu cadastar… mas não conseguiu atualizar…
é alguma coisa que você esta fazendo na hora de atualizar.

Posta o codigo ai!

romarcio

No update, vc deve estar tentando inserir algum campo que é Boolean no código e String no banco de dados, ou vice-versa.

Precisa criar esse campo com o mesmo tipo que tem no banco de dados, ou caso o Boolean seja no código java, transformar ele em String quando for salvar.

maranata

Galera,

Parece que o buraco é mais embaixo. Ainda não tenho a solução, mas não estou atualizando nada. Parece ser alguma coisa relacionada a cache. Como disse anteriormente este erro começou após retirar a estratégia () do mapeamento de algumas classes que estavam apresentando o erro de ReadyOnly lock, quando eu tentava inserir.

:arrow: Outra questão: avaliei o código da aplicação e não existe nenhum método de atualização de dados. Até o momento, a aplicação APENAS consultava dados. Agora que foi necessário eu alterá-la para inserir dados.

Continuo perdido :roll:

Abçs.

leo_mf

No update, vc deve estar tentando inserir algum campo que é Boolean no código e String no banco de dados, ou vice-versa.

Precisa criar esse campo com o mesmo tipo que tem no banco de dados, ou caso o Boolean seja no código java, transformar ele em String quando for salvar.

Eu também acho que é isso.

maranata

Encontrei a solução!!! Não era erro de mapeamento de tipos. Bastou limpar a sessão. Segue:

session.clear();
			
Transaction transaction = session.beginTransaction();
session.save(acesso);
transaction.commit();
session.close();

Para maiores esclarecimentos, me orientei pelo tópico “20.3. Gerenciando os caches” do manual de referência do hibernate.

Criado 24 de novembro de 2010
Ultima resposta 24 de nov. de 2010
Respostas 8
Participantes 4