Ver Mensaje Individual
  #1 (permalink)  
Antiguo 06/11/2013, 10:59
skitrock
 
Fecha de Ingreso: noviembre-2013
Mensajes: 3
Antigüedad: 10 años, 5 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