Query Hibernate trabajando con Objetos

Una vez que aprendí a trabajar con Hibernate con Annotations en Java, utilizaba el lenguaje HQL tal y como lo utilizaría con SQL, en algún momento me percaté que al crear los Beans de las entidades se declaraban objetos dentro de los objetos... Para un ejemplo la clase siguiente...


package data;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

@Entity
public class Ciudad {
private int Codigo;
private String Descripcion;
private Municipio municipio;

@Id
@GeneratedValue
public int getCodigo() {
return Codigo;
}
public void setCodigo(int codigo) {
Codigo = codigo;
}
public String getDescripcion() {
return Descripcion;
}
public void setDescripcion(String descripcion) {
Descripcion = descripcion;
}

@ManyToOne
@JoinColumn(name="CodMunicipio")
public Municipio getMunicipio() {
return municipio;
}
public void setMunicipio(Municipio municipio) {
this.municipio = municipio;
}
}

lógicamente asociada a la clase Municipio como sigue:

package data;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

@Entity
public class Municipio {
private int Codigo;
private String Descripcion;
private Estado estado;
@Id
@GeneratedValue
public int getCodigo() {
return Codigo;
}
public void setCodigo(int codigo) {
Codigo = codigo;
}
public String getDescripcion() {
return Descripcion;
}
public void setDescripcion(String descripcion) {
Descripcion = descripcion;
}
@ManyToOne
@JoinColumn(name="CodEstado")
public Estado getEstado() {
return estado;
}
public void setEstado(Estado estado) {
this.estado = estado;
}
}

y ésta a su vez a la última clase... Estado...

package data;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;

@Entity
public class Estado {
private int Codigo;
private String Descripcion;
@Id
@GeneratedValue
public int getCodigo() {
return Codigo;
}
public void setCodigo(int id) {
Codigo = id;
}
public String getDescripcion() {
return Descripcion;
}
public void setDescripcion(String descripcion) {
Descripcion = descripcion;
}
}

Ahora bien...

De la forma más parecida al SQL, haría la consulta de una Ciudad de cierto Municipio así:

try {
Session sesion = principal.fabrica.getCurrentSession();
sesion.beginTransaction();
Query queryResult = sesion.createQuery("from Ciudad where CodMunicipio= :codmun");
queryResult.setInteger("codmun",FacMunicipio.getCodigo());
List Ciudades = (Ciudad) queryResult.list();
sesion.getTransaction().commit();
} catch (HibernateException e2) {
return null;
}


Reestableciendo el principio de encriptación y aprovechamiento de los objetos y el uso de los beans y la utilización de otros métodos del Query de Hibernate...

try {
Session sesion = principal.fabrica.getCurrentSession();
sesion.beginTransaction();
Query queryResult = sesion.createQuery("from Ciudad where municipio= munic");
queryResult.setEntity("munic",FacMunicipio);
List Ciudades = (Ciudad) queryResult.list();
sesion.getTransaction().commit();
} catch (HibernateException e2) {
return null;
}

La ventaja de este tipo del manejo del HQL, es mucho más práctico, ya que tratamos directamente con los objetos. 




Comentarios

Entradas populares de este blog

Recuperar base de datos mysql desde la carpeta data

Imagen de Fondo en Reporte iReport de JasperReport

Sistema de Gestión de Laboratorio Clínico TICLAB