<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
		<id>https://dosideas.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=190.228.28.250</id>
		<title>Dos Ideas. - Contribuciones del usuario [es]</title>
		<link rel="self" type="application/atom+xml" href="https://dosideas.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=190.228.28.250"/>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/Especial:Contribuciones/190.228.28.250"/>
		<updated>2026-09-19T11:46:05Z</updated>
		<subtitle>Contribuciones del usuario</subtitle>
		<generator>MediaWiki 1.28.2</generator>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Consultas_Con_HibernateTemplate&amp;diff=6007</id>
		<title>Consultas Con HibernateTemplate</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Consultas_Con_HibernateTemplate&amp;diff=6007"/>
				<updated>2011-07-18T17:35:44Z</updated>
		
		<summary type="html">&lt;p&gt;190.228.28.250: /* Buscar un objeto por ID */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Spring Framework]]&lt;br /&gt;
[[Category:Hibernate]]&lt;br /&gt;
En [[Spring Framework]], Los DAO que heredan de ''HibernateDaoSupport'' tienen acceso al método ''getHibernateTemplate'', el cual devuelve una clase con diversas utilidades para manejar objetos con Hibernate.&lt;br /&gt;
&lt;br /&gt;
===Buscar un objeto por ID===&lt;br /&gt;
&lt;br /&gt;
Si necesitamos buscar un objeto por su ID, tenemos básicamente dos opciones: usar el método ''get()'' o el método &lt;br /&gt;
''load()'' de la Session de Hibernate.&lt;br /&gt;
&lt;br /&gt;
''get()'' busca una entidad por su PK, y tira una DataAccessException si no lo encuentra. Por otro lado, ''load()'' realiza la misma operación, pero devuelve null si no la encuentra. En general, debe usarse ''load()'' cuando no se espera que la entidad no se encuentre.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
 public Invasor buscarInvasorPorId(Long id) {&lt;br /&gt;
     return getHibernateTemplate().get(Invasor.class, id);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Buscar colecciones con Criteria===&lt;br /&gt;
&lt;br /&gt;
Existen dos formas básicas de realizar estas consultas: utilizando Criteria, o escribiendo la consulta en HQL.&lt;br /&gt;
&lt;br /&gt;
Generalmente, utilizar Criteria es más simple y facil de programar, y suele ser una buena elección cuando en la consulta se realiza sobre el objeto mapeado (y las relaciones que tenga explicitamente mapeadas). En otros casos, el query en HQL puede ser más conveniente.&lt;br /&gt;
&lt;br /&gt;
Suponiendo que un Invasor tenga un Estado (relación muchos-a-uno desde el Invasor al Estado), se puede referenciar directamente al Estado de un Invasor (como si fuera un atributo más... que de hecho, lo es!).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
 public Collection&amp;lt;Invasor&amp;gt; buscarInvasoresPorEstado(Long idEstado) {&lt;br /&gt;
     DetachedCriteria criteria = DetachedCriteria.forClass(Invasor.class);&lt;br /&gt;
     criteria.add(Restrictions.eq(&amp;quot;estado.id&amp;quot;, idEstado));&lt;br /&gt;
     return getHibernateTemplate().findByCriteria(criteria);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La clase Restrictions tiene varios operadores útiles, como ser LIKE case-unsensitive. Además, se pueden establecer criterios de ordenamiento.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
 public Collection&amp;lt;Invasor&amp;gt; buscarInvasoresPorEstadoNombre(Long idEstado, String nombre) {&lt;br /&gt;
&lt;br /&gt;
     DetachedCriteria criteria = DetachedCriteria.forClass(Invasor.class);&lt;br /&gt;
     criteria.add(Restrictions.eq(&amp;quot;estado.id&amp;quot;, idEstado));&lt;br /&gt;
     criteria.add(Restrictions.ilike(&amp;quot;nombre&amp;quot;, nombre));&lt;br /&gt;
     criteria.addOrder(Order.desc(&amp;quot;fechaEnrolamiento&amp;quot;));&lt;br /&gt;
     return getHibernateTemplate().findByCriteria(criteria);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Buscar colecciones con HQL===&lt;br /&gt;
&lt;br /&gt;
En ciertas circunstancias, puede ser preferible usar HQL. HibernateTemplate también provee algunos métodos útiles para esto. Supongamos el mismo método ''buscarInvasoresPorEstado()'', esta vez resuelto con HQL.&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
 private final String QUERY = &amp;quot;from Invasor invasor where invasor.estado.id = ?&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
 public Collection&amp;lt;Invasor&amp;gt; buscarInvasoresPorEstado(Long idEstado) {&lt;br /&gt;
     return getHibernateTemplate().find(QUERY, idEstado);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otra alternativa es utilizar el método ''iterate()'' que devuelve un iterador para recorrer los resultados.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
 private final String QUERY = &amp;quot;from Invasor invasor where invasor.estado.id = ?&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
 public Iterator&amp;lt;Invasor&amp;gt; buscarIteradorDeInvasoresPorEstado(Long idEstado) {&lt;br /&gt;
        HibernateTemplate ht = getHibernateTemplate();&lt;br /&gt;
        ht.setFetchSize(15);&lt;br /&gt;
        Iterator it = ht.iterate(QUERY, idEstado);&lt;br /&gt;
        return it;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Importante: Notar que con esta alternativa, se modifica el fetch size del template de hibernate incluso para las siguientes utilizaciones del dao. Para utilizar el default, debería volver a setearse en 0.&lt;br /&gt;
&lt;br /&gt;
Un análisis de estas alternativas se puede ver en [[Eficiencia Ejecutando Querys Con Hibernate]]&lt;br /&gt;
&lt;br /&gt;
===Buscar colecciones por muestra===&lt;br /&gt;
A veces puede ser útil realizar una búsqueda por &amp;quot;muestra&amp;quot;. En estas búsquedas, se crea un objeto mapeado seteando los valores que queremos ubicar, y este mismo objeto es usado como filtro para crear la consulta. En este tipo de búsquedas no se tiene en cuenta el ID del objeto de muestra (es decir, aunque el objeto de muestra tenga seteado su PK, no será utilizada para la búsqueda).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
 public Collection&amp;lt;Invasor&amp;gt; buscarInvasoresPorFechaEnrolamiento(Date fechaEnrolamiento) {&lt;br /&gt;
     Invasor invasor = new Invasor();&lt;br /&gt;
     invasor.setFechaEnrolamiento(fechaEnrolamiento);&lt;br /&gt;
     return getHibernateTemplate().findByExample(invasor);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Buscar un sólo objeto con consultas===&lt;br /&gt;
&lt;br /&gt;
Los métodos find (de Criteria o HQL) siempre devuelve colecciones de objetos. Pero, ¿qué pasa si sabemos que nuestro query sólo puede devolver una instancia? Para esto, podemos usar la clase ''DataAccessUtils'' de Spring.&lt;br /&gt;
&lt;br /&gt;
Como todos saben, cada comandante de la flota Irken sólo puede liderar una nave espacial (son petisos los Irken, no les daría para ir paseando por diversas naves...)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
 public NaveEspacial buscarNaveEspacialPorComandante(Long idInvasor) {&lt;br /&gt;
     DetachedCriteria criteria = DetachedCriteria.forClass(NaveEspecial.class);&lt;br /&gt;
     criteria.add(Restrictions.eq(&amp;quot;idInvasorComandate&amp;quot;, idInvasor));&lt;br /&gt;
     return (NaveEspacial) DataAccessUtils.uniqueResult(getHibernateTemplate().findByCriteria(criteria));&lt;br /&gt;
//jaime&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El método ''DataAccessUtils.uniqueResult()'' lanzará una excepción si la consulta devuelve más de un resultado.&lt;br /&gt;
&lt;br /&gt;
===Paginar resultados===&lt;br /&gt;
&lt;br /&gt;
Los métodos de búsqueda tienen una forma simple para paginar resultados. El método ''findByCriteria(criteria, desde, cantidad)'' permite obtener un set reducido de datos.&lt;br /&gt;
&lt;br /&gt;
El siguiente método devuelve el &amp;quot;Top ten&amp;quot; de los mejores Invasores de la flota.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
 public Collection&amp;lt;Invasor&amp;gt; buscarMejoresInvasores() {&lt;br /&gt;
     DetachedCriteria criteria = DetachedCriteria.forClass(Invasor.class);&lt;br /&gt;
     criteria.addOrder(Order.desc(&amp;quot;cantPlanetasConquistados&amp;quot;));&lt;br /&gt;
     return getHibernateTemplate().findByCriteria(criteria,0,10);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Ver también==&lt;br /&gt;
* [[Hibernate Con Spring]]&lt;/div&gt;</summary>
		<author><name>190.228.28.250</name></author>	</entry>

	</feed>