lunes, 24 de agosto de 2009

Hibernate: Usando un constructor en las sentencias HQL

De vuelta a la "rutina" y con las pilas cargadas tras las vacaciones, voy a escribir una nota que tenía pendiente hace tiempo.

Se trata de la posibilidad de usar un constructor dentro de una sentencia HQL. Por ejemplo (y me vuelvo a mojar con los ejemplos aunque no suelo elegir los más adecuados) puede que en nuestra arquitectura tengamos beans para gestionar las vistas, y que uno de estos beans maneje datos de varias clases del modelo. Podría ser interesante en determinadas ocasiones, que en las consultas podamos obtener directamente instancias de este bean, para no tener que obtener una instancia del modelo con cierto número de campos y relaciones, cuando sólo nos interesa unos pocos datos.

La forma de hacerlo es realmente simple, basta con añadir el new a la sentencia, e indicar los parámetros que le pasamos al constructor. Un ejemplo simple sería (no describo la clase Usuario ya que es sencillo imaginarla):

select new DatosUsuario(usr.id, usr.nombre, usr.direccion.codigoPostal)
from Usuario usr ...

1 comentario:

  1. Buenas, tengo un problema cuando a dicho constructor tengo que pasarle una vble en plan :mensaje, para que el constructor que tiene un String mensaje me pille ese mensaje.
    Por ejemplo: select new DatosUsuario(usr.id, usr.nombre, usr.direccion.codigoPostal, :tieneCasa)
    from Usuario usr
    Donde tieneCasa = "SI" por ejemplo. Despues le hago el query.setParameter("tieneCasa", "SI");
    Como podria hacerlo? Porque no me funciona.
    Gracias. Saludos

    ResponderEliminar