Excessão no hibernate

5 respostas
G

Ae galera,

estou executando o método findByPrimaryKey (Class classe, Serializable primaryKey), passando como argumento um objeto cujo identificador é uma String.
Já verifiquei o Hibernate.cfg.xml, o arquivo xml relativo ao objeto e aparentemente não há nada de errado.
o banco é Oracle. A excessão q ocorre no momento da consulta é a seguinte:

java.lang.ClassCastException

net.sf.hibernate.type.StringType.toString(StringType.java:47)

net.sf.hibernate.type.NullableType.nullSafeSet(NullableType.java:46)

net.sf.hibernate.type.NullableType.nullSafeSet(NullableType.java:35)

net.sf.hibernate.loader.Loader.bindPositionalParameters(Loader.java:674)

net.sf.hibernate.loader.Loader.prepareQueryStatement(Loader.java:713)

net.sf.hibernate.loader.Loader.doQuery(Loader.java:185)

net.sf.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:133)

net.sf.hibernate.loader.Loader.loadEntity(Loader.java:836)

net.sf.hibernate.loader.Loader.loadEntity(Loader.java:856)

net.sf.hibernate.loader.EntityLoader.load(EntityLoader.java:59)

net.sf.hibernate.loader.EntityLoader.load(EntityLoader.java:51)

net.sf.hibernate.persister.EntityPersister.load(EntityPersister.java:419)

net.sf.hibernate.impl.SessionImpl.doLoad(SessionImpl.java:2106)

net.sf.hibernate.impl.SessionImpl.doLoadByClass(SessionImpl.java:1980)

net.sf.hibernate.impl.SessionImpl.get(SessionImpl.java:1916)

br.org.df.codeplan.sigterra.dao.BaseDAO.findByPrimaryKey(BaseDAO.java:129)

br.org.df.codeplan.sigterra.dao.ContabilDAO.findConta(ContabilDAO.java:52)

br.org.df.codeplan.sigterra.facade.ContabilFacade.findConta(ContabilFacade.java:65)

br.org.df.codeplan.sigterra.struts.contabil.realizaLancamentoManual.RealizaLancamentoManualAction.chamaPaginaInformarValor(RealizaLancamentoManualAction.java:50)

sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

java.lang.reflect.Method.invoke(Method.java:324)

org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:280)

org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:216)

org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)

org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)

org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)

org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)

javax.servlet.http.HttpServlet.service(HttpServlet.java:709)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

Se alguem já se deparou com isso e puder puder ajudar, seria bastante grato. Qual as possiveis causas desta exceção?

Desde já agradeço, Guilherme

5 Respostas

A

Cara,
parece que sua string ta chegando com valor nulo nesse metodo e ele nao ta conseguindo converter! Nos meus projetos as chaves sempre são definidas como long. Faz assim olha no seu arquivo de hbm qual o tipo do ID que vc definiu e coloque um breakpoint no ponto que vc chama o metodo find e ve qual valor ta chegando, se ta nulo e depois tenta passar um long!

G

cara, obrigado, mas não tá chegando nulo. o obejto tá chegando preenchido. o tipo de dado desse atributo deve ser String pq na tabela do Oracle ele é uma String. acho q o hibernate não tá aceitando essa String como identificador!

G

problema resolvido!

B

e qual foi a solução? =)

G

Deveria passar somente a String que é chave , q implementa Serializable, como argumento para o findByPrimaryKey e nao o objeto inteiro como estava fazendo…

Criado 27 de abril de 2005
Ultima resposta 29 de abr. de 2005
Respostas 5
Participantes 3