2011-08-05 16 views
6

Tengo dos dominios que forman parte de un barco de relaciones uno a muchos. Me preguntaba cómo puedo consultar al niño para los padres FK? abajo es el pseudo-código para padre/hijoGrails, cómo buscar por un registro mediante su clave externa

Padres:

class AlumProfile { 
String firstName 
String lastName 
    static hasMany = [alumLanguage : AlumLanguage] 


static mapping = { 
    cache true 
    id generator: 'assigned' 

    columns { 
     firstName type:'text' 
     lastName type:'text' 
    } 

    // 
} 
static constraints = { 
    firstName (nullable:true) 
    lastName (nullable:true) 
    } 

    } 

Niño:

class AlumLanguage { 
String name 
String level 

static belongsTo = [alumProfile:AlumProfile] 
static mapping = { 
    cache true 

    columns { 
     name type:'text' 
     level type:'text' 
    } 
} 
static constraints = { 
    name(nullable:true) 
    level(nullable:true) 
} 
    } 

Aunque no explícitamente crear el FK, griales se encarga de la creación que la base de datos MySQL por sí mismo. Pero, cuando quiero consultar al niño por el FK así:

if(AlumLanguage.findByNameAndAlumProfileId(language.'language'.toString(), 'jIi-hRi4cI')==null){ 
     //do something 
} 

consigo un error: No se encontró para Nombre [alumProfileId] para la clase [mgr.AlumLanguage clase]

¿Alguna sugerencia sobre la propiedad cómo lograr esto?

gracias Jason

Respuesta

7

Pruebe un tipo criteria:

def c = AlumLanguage.createCriteria() 
def languages = c.get { 
    eq('name', 'whatever-language') 
    alumProfile { 
     eq('id', 'jIi-hRi4cI') 
    } 
} 
+0

Esto devuelve una lista. Necesito que me devuelvan el objeto AlumLanguages, para poder editar/eliminar instancias de él – jason

+0

Actualizado. Sin embargo, si lo va a hacer de esa manera, probablemente quiera declarar AlumProfile.alumLanguage como un 'Conjunto' para imponer miembros únicos. –

+0

¡Gracias, eso fue todo! por curiosidad, ¿a qué te refieres con "declarar AlumProfile.alumLanguage como conjunto"? ¡Gracias de nuevo! – jason

Cuestiones relacionadas