Как получить доступ к свойству из запроса Grails - PullRequest
0 голосов
/ 19 марта 2012

У меня есть класс домена с именем Application следующим образом:

class Application {
    static hasOne = [resumption:Resumption, employee:Employee]
    //Employee employee 
    Date startDate
    Date endDate
    Integer amountOfDays
    String leaveRecommended
    String leaveNotRecommended
    Date supervisorDate

    String toString(){
        return "Application for ${employee.lastName}, ${employee.firstName}"
    }
}

В ApplicationController я пытаюсь написать запрос, который будет искать все приложения, которые соответствуют определенному идентификатору сотрудника. Я делаю так:

def applicationlist(){

    if(!params.max){
        params.max = 10
    }

    def query
    def criteria = Application.createCriteria()
    def results

    query = { eq("employee_id", Long.parseLong("1")) }

    results = criteria.list(params, query)
    render(view:"employeeapplicationlist", model:[applicationlist:results])
}

Теперь я получаю сообщение об ошибке: «не удалось разрешить свойство: employee_id» Я проверил сгенерированную таблицу Application в MySql, есть столбец employee_id со значением. Странно то, что я могу получить доступ к любому другому свойству (например, amountOfDays), так что же происходит с employee_id? Почему он жалуется, что не может разрешить собственность? Что мне не хватает? Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 19 марта 2012

Ассоциации в критериях DSL имеют вид

Application.withCriteria{
    employee{
       eq 'id', 1
    }
}

http://grails.org/doc/latest/guide/GORM.html#criteria

Но вы могли бы просто сделать:

def employee = Employee.proxy(1)
Application.findAllByEmployee( employee )

Это несколько раз встречается в руководстве пользователя Grails как «запрос ассоциаций»

0 голосов
/ 19 марта 2012

Ну, похоже, я все еще не полностью настроен на взаимодействие с базой данных на уровне объектов.Для всех, кто сталкивается с этой или подобной проблемой, вот исправление:

query = { eq("employee.id", Long.parseLong("1")) }

Так как класс Application Domain имеет одного Employee, тогда нам просто нужно получить доступ к полю id этого сотрудника.Помните, что мы в ApplicationController.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...