Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Grails - Implementar una consulta HQL

Estas en el tema de Grails - Implementar una consulta HQL en el foro de Java en Foros del Web. Iniciando en el mundo de Grails, me he encontrado con la necesidad de realizar una consulta directa a la base de datos. Por lo que ...
  #1 (permalink)  
Antiguo 08/01/2014, 15:41
 
Fecha de Ingreso: julio-2007
Mensajes: 11
Antigüedad: 16 años, 9 meses
Puntos: 0
Grails - Implementar una consulta HQL

Iniciando en el mundo de Grails, me he encontrado con la necesidad de realizar una consulta directa a la base de datos.

Por lo que he leído, este tipo de consultas es correcto definirlas en el Controller.

Por tanto:

Tengo el:

PrestamoController

Del cual en uno de sus métodos "def create" se incluyo el "def resultados = Prestamo.executeQuery("select p.estatus from Prestamo p")"

Ahora con esta sentencia, mi pregunta es:

¿Cómo puedo mostrar dichos resultados en un g:select de un gsp?

De antemano muchas gracias.
  #2 (permalink)  
Antiguo 09/01/2014, 01:37
Avatar de rgf1987  
Fecha de Ingreso: diciembre-2012
Ubicación: Asturias
Mensajes: 269
Antigüedad: 11 años, 4 meses
Puntos: 22
Respuesta: Grails - Implementar una consulta HQL

Cita:
Iniciado por KRADLEGNO Ver Mensaje
Por lo que he leído, este tipo de consultas es correcto definirlas en el Controller.
Muy buenas,

yo nunca he trabajado con Grails, pero por lo que he leído es un framework que se basa en el patrón Modelo-Vista-Controlador, si esto es así el flujo de funcionamiento mas o menos es el siguiente:

1. El usuario realiza una petición
2. Un controlador recibe dicha petición y la gestiona
3. El controlador solicita al modelo las operaciones necesarias (obtener datos, insertar datos, actualizarlos... etc)
4. El controlador una vez que obtiene los datos necesarios, llama a una vista para mostrar el resultado obtenido o los datos que se consideren oportunos.

Por lo tanto, la ejecución de la consulta no se debería realizar en el Controller, sino en el Modelo, ya que sino estarías rompiendo el patrón.

Es decir, para tu caso el Controlador, PrestamoController debería hacer una llamada al Modelo(aquí podrías utilizar por ejemplo el patrón DAO para conseguir una mayor abstracción) y sería este el encargado de realizar la consulta correspondiente a la base de datos.

Un saludo.
  #3 (permalink)  
Antiguo 09/01/2014, 10:12
 
Fecha de Ingreso: julio-2007
Mensajes: 11
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: Grails - Implementar una consulta HQL

Totalmente de acuerdo, el punto del MVC es el que defines.

Por ejemplo, navegando en la web encontré:

class PruebaController {
def index() {
def saludo = "Hola mundo"

[saludo:saludo]
}
}

<html>
<head></head>
<body>
<p>${saludo}</p>
</body>
</html>

Y el valor de la variable "saludo" se muestra en el HTML.

Como se ve que se esta haciendo desde un controlador, esto es en un ambiente de pruebas que es en el mismo caso, solamente estoy
  #4 (permalink)  
Antiguo 09/01/2014, 10:30
Avatar de rgf1987  
Fecha de Ingreso: diciembre-2012
Ubicación: Asturias
Mensajes: 269
Antigüedad: 11 años, 4 meses
Puntos: 22
Respuesta: Grails - Implementar una consulta HQL

En ese caso en concreto está bien, porque es un ejemplo, no está realizando una consulta a la BBDD, sino debería llamar al modelo, solamente está inicializando una variable y pasándola a la vista.

Un saludo.
  #5 (permalink)  
Antiguo 15/01/2014, 18:52
 
Fecha de Ingreso: julio-2007
Mensajes: 11
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: Grails - Implementar una consulta HQL

Hola, efectivamente, este es un ejemplo para mostrar datos de un Controller a una Vista.

A lo que yo quería llegar es:

Mediante una consulta HQL, mostrar los datos en un Select.

Y quedo de la siguiente forma (Espero poder explicarme):

En el Controller (de una aplicación CRUD ya al 100%)

Tenia:

def create = {
def prestamoInstance = new Prestamo()
prestamoInstance.properties = params
return [prestamoInstance: prestamoInstance]
}

A lo cual con executeQuery, me permitio, realizar el query de dos tablas (DomainClasses) uniéndolas por los ID de las tablas

El detalle que tenia es que el Create (por default) retorna los datos para mostrar los datos que van a guardar los values de todos los demas atributos del gsp

Por lo tanto únicamente se debía "fusionar" la declaración de quienes maparean dichos datos.
***Tanto para todos los atributos del gsp, como en particular para el Select***

Quedando:

def create = {
def prestamoInstance = new Prestamo()
prestamoInstance.properties = params
def resultados = Prestamo.executeQuery("select p.nombre from Persona p where not exists (select t.persona from Prestamo t where t.persona = p.id)")
[prestamoInstance: prestamoInstance, resultados: resultados]
}

Por ultimo en el GSP únicamente fue asignar los valores con: ${} en la propiedad From del Select

<g:select name="prestamo.resultados" from="${resultados}" value="${resultado}"/>


Espero que este tema le pueda servir a alguien mas en el futuro... :)

Etiquetas: grails
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:32.