Tengo algunos problemas con la proyección en Grails. ¿Podría ayudarme a revisarlos y sugerir soluciones para mí?Grails: ¿Proyección en muchas tablas?
Quiero consultar datos en muchas tablas que tienen una relación de varios a uno y una proyección en algunas propiedades en ambos. Por ejemplo:
class Person { int id String name String address static hasMany = [cars : Car] } class Car { int id String brand long price Person owner static belongsTo = [owner : Person] }
Así que, ¿cómo puedo usar sólo una withCriteria consulta (aplicar proyección) para obtener información de un coche determinado (incluya la marca, el precio y el nombre del propietario)? ¿Es posible utilizar:
Car.withCriteria { projections { property("brand") property("price") property("owner.name") } eq("id", carId) }
¿Puedo usar una proyección para obtener información de una persona especificada junto con el nombre de todos sus coches? Por ejemplo: [01, Perter, 01 Street A, [Mercedes, Toyota, Ducatti]]?
Una situación especial: (con clase de persona arriba)
Una persona puede unirse a muchos Organización, y una organización puede tener uno Organizaciones "padre" (y viceversa, una organización puede tener muchas otras organizaciones dependen). Pero hay una regla: una persona solo puede unirse a una sola organización infantil de una organización determinada. Entonces, con una organización dada O y una persona P, ¿cuál es la forma más rápida de obtener información de P junto con el nombre de la organización dependiente de O que tiene P como miembro? Prefiero usar la proyección de Grails.Aquí es modelo de datos:
class Person { int id String name String address static hasMany = [joinedOrgs : Organization] } class Organization { int id String name Organization parentOrg static hasMany = [members : Person, childOrgs : Organization] }
Soy un novato con Grails, y me gustaría entender GORM mucho más. Muchas gracias por tu ayuda.
¿Por qué se necesita el 'alias'? –
@AlexanderSuraphel sin alias no puede acceder 'owner.name' directamente en ' propiedad ('owner.name', 'owner.name') ' Incluso puede obtener los resultados anteriores sin alias pero necesita escribir más código para esto . véase más adelante ejemplo 'proyecciones { propietario { propiedad ('nombre', 'nombre') } propiedad ('marca', 'marca') propiedad ('precio', 'precio') }' favor avíseme si todavía tiene alguna confusión o no fue la respuesta correcta para usted. Gracias –
@AlexanderSuraphel Si puede escribir el código anterior sin 'createAlias ('owner', 'owner')' de lo que es posible en las versiones más nuevas de grails –