HibernateUtil Clases para JAVA
mentolateApuntes4 de Diciembre de 2015
527 Palabras (3 Páginas)265 Visitas
HQL. Introducción
• Es un lenguaje de base de datos similar al SQL,
completamente orientado a objetos, usamos nombres
de clases y sus propiedades en lugar de nombres de
tablas y columnas.
• No diferencia entre mayúsculas y minúsculas excepto
en los nombres de clases…
• Regresa sus resultados en forma de objetos
• Independiente del manejador de base de datos
• No existe el select *
• Para hacer referencia a algún campo necesitamos
haberle asignado un alias a la tabla
FROM Usuario as u WHERE u.id = 1
FROM Usuario u WHERE u.id = 1
HQL
• Podemos asignar alias a las entidades asociadas o a los
elementos de una colección de valores usando un join
(las propiedades que sirven de enlaces entre clases):
FROM Usuario u inner join u.permisos as p
• Existen dos formas de referirnos a la propiedad que
sirve como identificador de la entidad:
– La propiedad especial “id” (así con minúsculas). No
importa si la clase entidad no tiene una propiedad llamada
id.
FROM Usuario as u WHERE u.id = 1
– Por la propiedad identificador
FROM Usuario as u WHERE u.clave = 1
HQL. Fetch join LAZY
@Entity
public class Libro implements Serializable
{ @Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;
private String titulo;
public class Persona implements Serializable
{ @Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;
private String nombre;
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
@JoinColumn (name="personaID")
private List<Libro> libros = new ArrayList<Libro>();
Esto quiere decir que cuando recuperemos, ya dentro de una aplicación, a la
Persona, sus libros no serán recuperados e inicializados en ese momento. Al
hacer referencia a persona.getLibros() se realizará el select necesario
HQL. Fetch join LAZY
Fetch Join no se permite con iterate
Query cons = sesion.createQuery("from Persona per left join fetch per.libros");
List<Persona> listaContactos = cons.list(); //sin left no aparecen las personas sin libros
System.out.println("Hay " + listaContactos.size() + "contactos en la base de datos");
Integer idper=0;
for(Persona c : listaContactos)
{
if ( idper!= c.getId()) {//con esto consigo que no se repita persona y sus libros por cada
libro que tenga
System.out.println("Nombre Persona : " + c.getNombre() +"tiene los siguientes libros
");
List <Libro> listaLibros=c.getLibros();
for (Libro lib: listaLibros){
System.out.println("titulo : " + lib.getTitulo());
}
idper=(int) c.getId();
}
}
* En la ejecución vemos que solo ejecuta un select
HQL. Respuesta del código LAZY
from Persona per left join fetch per.libros
Hibernate: select persona0_.id as id1_0_, libros1_.id as id5_1_,
persona0_.nombre as nombre1_0_, libros1_.titulo as titulo5_1_,
libros1_.personaID as personaID1_0__, libros1_.id as id5_0__ from
Persona persona0_ left outer join Libro libros1_ on
persona0_.id=libros1_.personaID
Hay 5contactos en la base de datos
Nombre Persona : Pepe tiene los siguientes libros
titulo : libro 1
titulo : libro 2
titulo : Libro de Pepe
Nombre Persona : Juan tiene los siguientes libros
titulo : libro 3
Nombre Persona : Maria tiene los siguientes libros
...