Ver Mensaje Individual
  #7 (permalink)  
Antiguo 28/02/2017, 18:50
abrahamhs
 
Fecha de Ingreso: enero-2009
Ubicación: Kandor
Mensajes: 209
Antigüedad: 15 años, 9 meses
Puntos: 11
Respuesta: Alguna API de Hibernate para hacer queries en java que no me haga querer s

En hibernate existen tres formas de ejecutar una consulta:
1. Criteria: que es como lo estas haciendo
2. HQL: Es el ejemplo que te pusieron (ojo no es SQL y tambien lo soporta NHibernate en C#)
HQL no es SQL porque con lo que trabajas es con los objetos java (POJOs) o con los objetos C# (POCOs) que estan mapeados a las tablas de tu base de datos.
Es decir que en el ejemplo que te pusieron:
Código Java:
Ver original
  1. String hql = "FROM Persona p WHERE p.edad > 30";
La palabra Persona hace referencia a la clase Persona que esta mapeada a la tabla personas, por eso va con mayuscula. Y como es una clase la linea puedo haberse escrito así
Código Java:
Ver original
  1. String hql = "FROM mi.paquete.Persona p WHERE p.edad > 30";
Y pon mucha atención de que no lleva SELECT.
HQL resuelve todas las cuestiones que tienen que ver con la base de datos, es decir, si usas oracle y luego migras a SQL Server o a postgres el HQL es el mismo.

3. SQL Nativo: El SQL se usa para cuestiones de migración, en lo que vas cambiendo los querys a HQL o criteria y tambien lo soporta Nhibernate. Este es un ejemplo en java:
Código Java:
Ver original
  1. Query query=session.createSQLQuery("SELECT IdCiclo,nombreCiclo,Horas FROM CicloFormativo");
  2. List<Object[]> listDatos=query.list();
  3. for (Object[] datos : listDatos) {
  4.     System.out.println(datos[0]+ "-" +datos[1]+ " "+datos[2]+" Horas");
  5. }

Aqui si accedes directo a las tablas.

Si existe una herramienta en eclipse para validar tus HQL:
En el menu Help->Install new software
Pega esta url
http://download.jboss.org./jbosstool...s/development/
y en los paquetes que salen abajo selecciona Jboss application develovment->Hibernate tools
e instala. Después reinicia eclipse, esto te instala el editor de HQL y tendras que conectar la interfaz gráfica dependiendo de la base de datos que estés usando.

Por ultimo te comento que la actitud que estas tomando es muy mala. Se ve que eres fanboy de C# Pero ¿No te has preguntado porque los que hicieron este sistema escogieron NHibernate en vez de Linq u o framework c#? La razón es que la mayoria de ORMs C# estan demasiado integrados hacia SQL Server y cuesta trabajo migrar otras bases, cosa que no ocurre con NHibernate.

Otra cosa también que pasa con C# es que te facilita tanto las cosas que despues no tienes idea de que esta pasando por atras. Por ejemplo, en este codigo:
Código Java:
Ver original
  1. var mayoresDeEdad =
  2.     session.Query<Persona>()
  3.            .Where(x => x.Edad > 30)
  4.            .ToList();
¿Sabes cual es el tipo real de mayoresDeEdad? Y la respuesta es que no lo sabes porque usar var, es como usar el variant de visual basic, que toma el tipo de dato que mejor le acomoda segun el caso. Es decir estas usando C# al estilo visual basic y no al estilo C#.

Mucha gente se queja de java de que es muy verboso al escribir código. Pero yo lo veo como algo bueno, porque eso obliga a los programadores novatos a hacer bien las cosas. Y si no me crees pregunta a los que programan PHP novatos y veras el enorme problema que tienen haciendo cosas como esta:
Código PHP:
Ver original
  1. <?php
  2. echo "<p>Revuelvo todo mi codigo</p>";
  3. ?>
Saludos