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:
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í
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 originalQuery query=session.createSQLQuery("SELECT IdCiclo,nombreCiclo,Horas FROM CicloFormativo");
List
<Object[]> listDatos
=query.
list();for (Object[] datos
: listDatos
) { System.
out.
println(datos
[0]+ "-" +datos
[1]+ " "+datos
[2]+" Horas"); }
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 originalvar mayoresDeEdad =
session.Query<Persona>()
.Where(x => x.Edad > 30)
.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<?php
echo "<p>Revuelvo todo mi codigo</p>";
?>
Saludos