2
respostas

java.math.BigInteger cannot be cast to java.lang.Long

Ja tentei praticamente de tudo. Testei com JBoss, Wildfly, Mysql 5, mysql 8, java 7, java 8, Náo há nenhum variável Long ou BigInteger no código. O código é baixado do link ao final capítulo 3, então está idêntico, sem tirar nem por. Segue o log

O que poderia ser??

20:55:11,633 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 62) MSC000001: Failed to start service jboss.persistenceunit."livraria.war#livraria": org.jboss.msc.service.StartException in service jboss.persistenceunit."livraria.war#livraria": javax.persistence.PersistenceException: [PersistenceUnit: livraria] Unable to build Hibernate SessionFactory
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:195)
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:125)
    at org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:640)
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:209)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
    at org.jboss.threads.JBossThread.run(JBossThread.java:320)
Caused by: java.sql.SQLException: java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.lang.Long
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920)
    at com.mysql.jdbc.ConnectionImpl.buildCollationMapping(ConnectionImpl.java:1074)
    at com.mysql.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:3590)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2531)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2301)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:834)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:416)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:317)
    at org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.createLocalManagedConnection(LocalManagedConnectionFactory.java:321)
    ... 31 more
Caused by: java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.lang.Long
    at com.mysql.jdbc.ConnectionImpl.buildCollationMapping(ConnectionImpl.java:1019)
    ... 44 more

20:55:11,665 ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) WFLYCTL0013: Operation ("deploy") failed - address: ([("deployment" => "livraria.war")]) - failure description: {"WFLYCTL0080: Failed services" => {"jboss.persistenceunit.\"livraria.war#livraria\"" => "javax.persistence.PersistenceException: [PersistenceUnit: livraria] Unable to build Hibernate SessionFactory
    Caused by: javax.persistence.PersistenceException: [PersistenceUnit: livraria] Unable to build Hibernate SessionFactory
    Caused by: org.hibernate.exception.GenericJDBCException: Unable to open JDBC Connection for DDL execution
    Caused by: java.sql.SQLException: javax.resource.ResourceException: IJ000453: Unable to get managed connection for java:/livrariaDS
    Caused by: javax.resource.ResourceException: IJ000453: Unable to get managed connection for java:/livrariaDS
    Caused by: javax.resource.ResourceException: IJ031084: Unable to create connection
    Caused by: java.sql.SQLException: java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.lang.Long
    Caused by: java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.lang.Long"}}
20:55:11,763 INFO  [org.jboss.as.server] (ServerService Thread Pool -- 37) WFLYSRV0010: Deployed "livraria.war" (runtime-name : "livraria.war")
20:55:11,767 INFO  [org.jboss.as.controller] (Controller Boot Thread) WFLYCTL0183: Service status report
2 respostas

Oi Ícaro, tudo bem?

Que operação você está tentando fazer e que dá erro?

Eu tentei baixar o arquivo do capítulo e subir naquele Wildfly, ajustei login e senha no standalone.xml e aparentemente subiu, então não consegui reproduzir. :(

Já que você está com o mesmo código do cap. 3, não rola excluir e importar de novo o projeto?

[]'s

Vc deve estar tentando recuperar uma tupla através de uma NativeQuerie não é mesmo? algo do tipo:

select a.idade, a.nome from aluno a

acontece que quando vc usa native querie acredito que o java não saiba ao certo o tamanho da variavel então ele coloca no maior posivel, no caso BigDecimal, então quando vc faz :

for(Object[] o : q.getReultList){
Integer idade = (Integer) o[0]; //erro de cast aqui
}

você vai ter que fazer

if(o[o] != null){
Integer idade =  new BigDecimal(o[o].toString()).intValue();
}

ai vai dar certo, o estranho que isso é só para NativeQueries, se for uma tupla resultante de um jpql comum então vc consegue dar cast para o tipo certinho só lembrando que o cast é obrigatorio pq quando vc quer uma tupla o resultlist é um array de objetos