Foro de elhacker.net

Programación => Java => Mensaje iniciado por: S4ms3pi0l__ en 24 Agosto 2019, 04:15 am



Título: Error java.lang.Byte cannot be cast to java.lang.Integer
Publicado por: S4ms3pi0l__ en 24 Agosto 2019, 04:15 am
Tengo el siguiente error: "java.lang.ClassCastException: java.lang.Byte cannot be cast to java.lang.Integer" cuando en ninguna parte tengo declarada alguna variable del tipo Byte. Lo mismo sucede con las otras dos líneas siguientes.

Código
  1. private void Cargar4()
  2.    {
  3.        Session s = NewHibernateUtil.getSessionFactory().openSession();
  4.         try
  5.        {  
  6.            Query query =  s.createQuery("select\n" +
  7.                                        "   c.categoryId as idCategoria,\n" +
  8.                                        "   c.name as nombre,\n" +
  9.                                        "   count(*) as Cantidad\n" +
  10.                                        "from Category c\n" +
  11.                                        "inner join c.filmCategories fc\n" +
  12.                                        "group by c.name");
  13.  
  14.            List<Object[]> res = query.list();
  15.            List<PeliculaC> elist = new ArrayList<PeliculaC>();
  16.            Iterator it = res.iterator();
  17.            while(it.hasNext()){
  18.                Object[] line = (Object[]) it.next();
  19.                PeliculaC pc = new PeliculaC();
  20.                pc.setIdCategoria((int) line[0]); //Esta es la línea donde me indica el error
  21.                pc.setNombre((String) line[1]); //java.lang.Long cannot be cast to java.lang.String
  22.                pc.setCantidad((int) line[2]); //java.lang.Byte cannot be cast to java.lang.Integer
  23.                elist.add(pc);
  24.            }
  25.       }catch( Exception io)
  26.        {     JOptionPane.showMessageDialog(null, "Fallo de conexion: "+io.toString());
  27.  
  28.        }finally
  29.        {  
  30.            s.close();    
  31.        }
  32.    }
  33.  

Espero puedan ayudarme.


Título: Re: Error java.lang.Byte cannot be cast to java.lang.Integer
Publicado por: ivancea96 en 24 Agosto 2019, 18:25 pm
Si pones un breakpoint o pones algun log antes de los casts, podrias ver el tipo exacto que devuelve cada objeto (line[0], [1] y [2]). Con un line[0].getClass().getName() verías su tipo, y verías si los casts que estás haciendo son correctos o no.

Por otro lado, si miras en la base de datos, también podrías ver si los tipos son los que esperas. ¿Podría ser que "Caregory.caregoryId" sea de tipo BYTE (o el tipo correspondiente en la base de datos que uses)?