Как создать временное свойство домена для на основе свойства дочерней коллекции на Grails? - PullRequest
0 голосов
/ 20 августа 2011

У меня есть следующие классы домена:

class ParentClass {
    String myProperty
    static hasMany = [ childClasses : ChildClass]
}

class ChildClass {
    Date birthday
    static belongsTo = [ parentClass : ParentClass]
}

Мне нужно иметь возможность перечислять ParentClasses, упорядоченные по дате рождения их самого последнего ребенка.Было бы лучше, если бы я мог использовать params, используемый на обычных страницах списка CRUD.

Я знаю, что мог бы написать конкретное правило в контроллере для этого конкретного заказа, но я чувствую, что это такне лучшее решение и что я должен использовать что-то вроде производного свойства или временного свойства, основанного на критериях, но не смог найти способ сделать это (я новичок в Grails и Hibernate).

Буду признателен за любые указатели.

Редактировать : Мне удалось сделать это:

static mapping = {
    mostRecentBirthday formula: '(
        SELECT c.data
        FROM ChildClass c
        WHERE c.parent_class_id=id
        ORDER BY c.birthday DESC LIMIT 1
    )'
}

Единственная проблема, с которой я столкнулся в этом решении, заключается в том, чтоparent_class_id там жестко запрограммирован.Есть ли более правильный способ написать это?

Ответы [ 2 ]

0 голосов
/ 20 августа 2011

Альтернативой подходу Crudolf является использование динамического поиска . Это будет выглядеть так:

def parentClass = new ParentClass(params.id);

def childListOrderedByBirthday =
        ChildClass.findAllByParentClass(parentClass,
                [sort: "birthday", order: "desc"]);

Это может быть чище.

0 голосов
/ 20 августа 2011

Если я правильно понимаю, то вы можете сделать это так:

def parentClass = new ParentClass(params.id);
// let this be your parentclass 
// you want to have the childs from ordered by birthday

def childListOrderedByBirthday = ChildClass.withCriteria {
    parentClass {
        eq("id", parentClass.id);
    }
    order("birthday", "desc")
}.list()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...