понедельник, 19 марта 2007 г.

Несколько новых функций в Grails

На этой неделе я добавил несколько новых функций в 0.5 snapshot Grails

Во-первых, теперь можно задать "область уникальности" для unique constraint. Допустим, я разрабатываю приложение для работы с сотрудниками. Каждый сотрудник имеет собственный логин, также сотрудники разбиты на группы, а группы в свою очередь входят в подразделения. Предположим также, что специфика моего приложения диктует мне следующие ограничения доменной модели: не может быть двух сотрудников с одинаковыми логинами в одной группе одного подразделения, и не может быть двух групп с одним именем в пределах одного подразделения. С новым функционалом подобные ограничения легко могут быть отображены в доменном классе:

class Employee {
String login
String group
String department

static constraints = {
login(unique:['group','department'])
group(unique:'department')
}
}

Вот и все. Очень просто, не правда ли? Просто указываем в качестве параметра к unique constraint имя другого поля того же класса (или список таких имён) - и в процессе валидации будет произведена проверка, что совокупность значений полей будет уникальна.

Другое изменение - это новый динамический метод 'getAll' у доменных классов. Метод принимает список идентификаторов объектов в качестве аргумента и возвращает список соответствующих сущностей в том же порядке. Если объекты для каких-либо идентификаторов не найдены, то на соответствующем месте результирующего списка будет null. При вызове без параметров метод возвращает список всех объектов.

И последнее изменение - возможность использования именованных HQL параметров в динамических методах 'find', 'findAll' и 'executeQuery'. Теперь эти методы могут принимать в качестве аргумента не только List позиционных параметров, но и Map именованных параметров в формате [имя:значение]. Примеры использования можно посмотреть в документации по приведённым ссылкам.

Комментариев нет: