Grails, как найти по записи по внешнему ключу - PullRequest
6 голосов
/ 05 августа 2011

У меня есть два домена, которые являются частью корабля отношений один-ко-многим.Мне было интересно, как я могу запросить ребенка для родителей FK?ниже приведен псевдо-код для родителя / ребенка

Родитель:

    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)
    }

    }

Ребенок:

 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)
}
  }

Хотя я не создаю явно FK, Grails заботитсясоздать его MySQL DB самостоятельно.Но, когда я хочу запросить ребенка у FK следующим образом:

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

я получаю ошибку: не найдено свойство для имени [alumProfileId] для класса [class mgr.AlumLanguage]

Любые предложения о том, как это сделать?

спасибо Джейсон

1 Ответ

7 голосов
/ 05 августа 2011

Попробуйте использовать критерий :

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