Вы знаете, есть много плохого все это
//Create an instance of Employee which currently holds nothing
def employee = new Employee();
//With this empty object of Employ now do findAllByExternalId
employee.findAllByExternalId("1234");
Вы должны смотреть вверх
//This will provide you with the entire employee
// domain class any it finds with that externalId.
// since it is declared as findAll
// the return will naturally be a list even though there may only be 1
def employees = Employee?.findAllByExternalId("1234")
Но это все очень долго наматывается, что вы пытаетесь сделать, проверить его существует или возвращает список всех сотрудников, имеющих этот идентификатор? Вы ссылаетесь его к ней, как getEmployee, так что я полагаю, вы пытаетесь найти один, и все же вы ищете итерации, делая FindAll
// If you wanted just to check it exists return a boolean like this
//This will return result as a boolean
boolean getEmployee(externalIdd) {
return Employee.where { externalId == externalIdd }.exists()
}
//if you wanted purely employee entire object bound to first records
Employee getEmployee(externalIdd) {
return Employee.where { externalId == externalIdd }?.find()
}
//if you wanted a list of entire employees like the findAll above
List<Employee> getEmployee(externalIdd) {
return Employee.where { externalId == externalIdd }?.findAll()
}
некоторые альтернативные методы и возможно менее интенсивным по дб в зависимости от того, что вы пытаетесь достичь конкретно булевый против текущего метода
Также я назвал externalIdd
так, когда речь идет о .where
иногда имеющие одинаковые имена переменных, как то, что называется, следовательно, вызывает проблемы переделки
E2A В соответствии с вашим комментарием, если вам нужен только идентификатор, тогда идентификатор обычно длинный, поэтому строгое определение Long
вы можете использовать def
- def более общий и ничего не вернет. Я уточнил, где включить свойство только id
, поэтому, если он найдет запись, он вернет id, а затем ?:0L
, если ничего не найдено. 0 L
В течение долгого времени, так что возвращайте ноль. Вы можете заменить его ?:null
или вообще не объявлять.
//if you only want to get the id as per comment
Long getEmployeeId(String externalIdd) {
return (Employee.where{externalId == externalIdd}.property('id')?\
.find()?:0L)
// Another way close to your findBy but manually declared
// and only returning id field.
// return Employee.find{externalId==externalIdd}?.id
}
'Int id' при запуске Grails запустить приложение, каждый домен будет автоматически создавать поле' id' & 'version' в базе данных, поэтому вы должны удалить эту строку 'int id' – akiong