Foros del Web » Programación para mayores de 30 ;) » Java »

Problema con sql nativo en hibernate

Estas en el tema de Problema con sql nativo en hibernate en el foro de Java en Foros del Web. BUENAS TARDES TENGO EL SIGUIENTE PROBLEMA CON LOS QUERY NATIVO DE HIBERNATE TENGO MI SIGUIENTE CODIGO PARA HACER UNA CONSULTA @Override public Vector<Object[]> consultar(String _sql) ...
  #1 (permalink)  
Antiguo 06/11/2013, 10:59
 
Fecha de Ingreso: noviembre-2013
Mensajes: 3
Antigüedad: 10 años, 4 meses
Puntos: 0
Pregunta Problema con sql nativo en hibernate

BUENAS TARDES TENGO EL SIGUIENTE PROBLEMA CON LOS QUERY NATIVO DE HIBERNATE TENGO MI SIGUIENTE CODIGO PARA HACER UNA CONSULTA

@Override
public Vector<Object[]> consultar(String _sql)
throws ExcepcionDeConsulta, ExcepcionDeConexion {
Vector<Object[]> vector=new Vector<Object[]>();
Session sesion=sesion();
sesion.beginTransaction();
SQLQuery st=sesion.createSQLQuery(_sql);
vector=new Vector<Object[]>(st.list());
try{
sesion.getTransaction().commit();
}catch(Exception ex){
ex.getMessage();
}
debug("Se realizo correctamente la consulta por sql, la cadena que se ejecuto fue: "+_sql);
return vector;
}



Debido a problemas externos debo realizar la misma consulta pero sin hibernate sin el metodo QUERY Y no encuentro la manera...el problema esta que tengo entendido que createSQLQuery(_sql); retorna un Object [] despues lo paso a una lista de tal manera que me queda una lista de arreglos de objetos y finalmente la paso a un vector no me pregunten porque asi esta la arquitectura y desconozco intento hacer lo mismo de manera con PrepareStatement y tengo este codigo



@Override
public Vector<Object[]> obtenSQL(String sql) throws ExcepcionDeConexion,
ExcepcionDeConsulta {

/*
* VERSION 4.0
*/
Vector<Object[]> vec=new Vector<Object[]>();

ResultSet rs = null;
// Statement st=null;
Connection conexion=FabricaDeConexiones.obtenConexiondb2();


try{
PreparedStatement pstm=conexion.prepareStatement(sql);

// st=conexion.createStatement();

// rs=st.executeQuery(sql);
rs=pstm.executeQuery();
ResultSetMetaData rsMetaData = rs.getMetaData();
List <Object[]>ll = new ArrayList();
int columnas=rsMetaData.getColumnCount();
Object[] objetos=new Object[columnas];

while (rs.next()){
objetos=new Object[columnas];

for(int a=0; a<columnas; a++)
{
if(objetos[a] instanceof Integer)
{
objetos[a]=(Integer) rs.getObject(a+1);

}
ll.add(objetos);
}


}




vec=new Vector<Object[]>(ll);


}catch(SQLException e){
e.printStackTrace();
throw new ExcepcionDeConsulta("No se puede realizar la consulta",e);
}
finally
{
try {
conexion.close();
rs.close();
// st.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

return vec;
}


de tal manera que funciona en ciertos casos no entodos alguien que me de una idea de como es que graba o se inserta la lista en hibernate? se que es de tipo ArrayList pero el problema es que al intentar sacarlo del Vector me da nullPointerException


este es mi codigo de prueba


String cRol = " and 1=1 ";


// if(Rol.equalsIgnoreCase("vendedor"))
// cRol = " AND COT.usuarioalta = '"+usuariologueado.getUsuario()+"' ";
//

String sqlCot = " select COT.cotizacion_id " +
" from cotizacion as COT " +
" inner join estatus as EST on (EST.estatus_id = COT.estatus) " +
" inner join invarti as IAR on (IAR.invarti_id = COT.equipos) " +
" inner join inventario as INV on (INV.inventario_id = IAR.inventario) " +
" where EST.estatus = 'cotf' AND COT.tipotransaccion = '1' AND INV.gruposdepartamentos = 'I' " +
" "+cRol+" AND IAR.estado <> 'S' AND IAR.estatus <> 'A' " +
" order by COT.cotizacion_id ";



Vector<Object[]> vec = new Vector<Object[]>();
try {
vec.clear();
vec = FabricaDeDaosMaquinaria.obtenCotizacion().obtenSQL (sqlCot);


System.out.println(vec.get(0));
} catch (ExcepcionDeConexion e) {
e.printStackTrace();

} catch (ExcepcionDeConsulta e) {
e.printStackTrace();

} catch (com.tracsa.excepciones.servicios.ExcepcionDeConex ion e) {
e.printStackTrace();

}



y esta es la manera con lo que quiero sacar la informacion aclaro con hibernate funciona perfecto pero con mi metodo no solo en unos casos funciona



if (vec!=null && vec.size()>0){
Cotizacion cot = new Cotizacion();

for(int i=0; i<vec.size(); i++){
cot.setId(Integer.parseInt(vec.get(i)[0].toString()));
System.out.println("ID DE LA COTIZACION"+vec.get(i)[0].toString());
Cotizacion veccaducadas=new Cotizacion();
}

}

donde mando cot.setId(Integer.parseInt(vec.get(i)[0].toString())); me dice que no puede pasar un Integer de un Object[] ... pero estoy seguro que es entero pero no se como guarda la informacion interna alguna idea les agradezco mucho estoy desesperado xD
  #2 (permalink)  
Antiguo 06/11/2013, 13:00
 
Fecha de Ingreso: noviembre-2012
Mensajes: 40
Antigüedad: 11 años, 4 meses
Puntos: 7
Respuesta: Problema con sql nativo en hibernate

Para convertir un Object a un Integer sería algo como lo siguiente :

Código Java:
Ver original
  1. Integer miNumero = (Integer) object;

En tu caso sería algo como lo siguiente :

Código Java:
Ver original
  1. cot.setId((Integer)vec.get(i)[0]));
Pruébalo a ver si te sirve.
  #3 (permalink)  
Antiguo 06/11/2013, 15:05
 
Fecha de Ingreso: noviembre-2013
Mensajes: 3
Antigüedad: 10 años, 4 meses
Puntos: 0
Respuesta: Problema con sql nativo en hibernate

de esa manera solo funciona cuando no declaro

Vector vec=new Vector();

si lo declaro Vector<Object[]> vec=new Vector<Object>();

no funciona no puedes castear un Array de Object a Integer La bronca esta en el guardado de Hibernate de como lo hace

pero muchas gracias por responder :D
  #4 (permalink)  
Antiguo 06/11/2013, 15:24
 
Fecha de Ingreso: noviembre-2012
Mensajes: 40
Antigüedad: 11 años, 4 meses
Puntos: 7
Respuesta: Problema con sql nativo en hibernate

Acabo de probar esto, y realmente funciona bien.

Código Java:
Ver original
  1. Vector<Object[]> vec = new Vector<Object[]>();
  2.  
  3.         vec.add(new Object[] { 1, "1" });
  4.  
  5.         for (int i = 0; i < vec.size(); i++) {
  6.             System.out.println(Integer.parseInt(vec.get(i)[0].toString()));
  7.             System.out.println((Integer)vec.get(i)[0]);
  8.  
  9.         }

Realmente :

vec.get(i) = array de Object (Object[])
vec.get(i)[0] = la primera posición de array, que puede contener un Integer, String ...etc

No se si estoy logrando entenderte, jeje.
  #5 (permalink)  
Antiguo 06/11/2013, 17:00
 
Fecha de Ingreso: noviembre-2013
Mensajes: 3
Antigüedad: 10 años, 4 meses
Puntos: 0
Respuesta: Problema con sql nativo en hibernate

gracias por contestar


mira uno de los casos y todoooooooooos los que te muestro funcionan con hibernate pero es sacar el valor asi


mira estes es mi query
String sql1= " select ABREVFRONT_ID from ABREVFRONT "; // solo me trae numeros



a lo que te entendi la manera de meter tu los objetos es esta no? con mi resulset en el metodo obtenSql perono funciona

while (rs.next())
{
objetos=new Object[columnas];

for(int a=0; a<columnas; a++)
{
objetos[a]=rs.getObject(a+1);

// ll.add(objetos);
vec.add(new Object[] { a, objetos });

}


}


al intentar pasarlo a ps cualquier int me da el error
Integer.parseInt(String.valueOf(vec.get(i))));

java.lang.NumberFormatException: For input string: "[Ljava.lang.Object;@a0864f"



de ante mano te agradezco

Etiquetas: hibernate
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:22.