Переходная недвижимость в домене Grails - PullRequest
6 голосов
/ 22 марта 2011

У меня есть домен Grails под названием People, и я хочу проверить, есть ли у каждого People дети или нет.Чайлдс - это другие объекты Люди.Вот моя доменная структура:

class People implements Serializable {

    static constraints = {
        name (nullable : false, unique : true)
        createdBy (nullable : false)
        creationDate (nullable : false)
    }

    static transients = ['hasChild']

    static mapping = {
        table 'PEOPLE'
        id generator: 'sequence', params : [sequence : 'SEQ_PK_ID']
        columns {
            id column : 'APEOPLE_ID'
            parentPeople column : 'PARENT_PEOPLE_ID'
        }
        parentPeople lazy : false
    }

    People parentPeople
    String name
    String description

    Boolean hasChild() {
        def childPeoples = People.createCriteria().count { 
            eq ('parentPeople', People) 
        }
        return (childPeoples > 0)
    }
}

Но я нигде не могу вызвать people.hasChild ().Не могли бы вы помочь мне в этом?Большое вам спасибо!

Ответы [ 2 ]

4 голосов
/ 22 марта 2011

Это потому, что в eq ('parentPeople', People) Grails не может понять, что такое «Люди» (это класс).Вы должны заменить «Люди» на this.Например:

static transients = ["children"]

    def getChildren() {
        def childPeoples = People.findAllByParentPeople(this, [sort:'id',order:'asc'])
    }
0 голосов
/ 11 июня 2014

Другой способ получить тот же результат - использовать Именованные запросы .Он кажется более сжатым и был создан специально для этой цели.Мне также это нравится, потому что оно соответствует шаблону статических объявлений в модели предметной области и, по сути, является критерием, который я использую в своих приложениях.Объявление переходного процесса, а затем написание замыкания кажется некоторым обходным решением, когда вы можете объявить именованные запросы ... просто мое мнение.

Попробуйте что-то вроде этого:

static namedQueries = {
    getChildren {
        projections {
            count "parentPeople"
        }
    }
}
...