6

Peopleという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()を呼び出すことはできません。これについて私を助けてくれませんか?どうもありがとう!

4

2 に答える 2

4

eq ('parentPeople', People)、Grailsは「People」が何であるかを理解できないためです(それはクラスです)。「People」を。に置き換える必要がありthisます。例えば:

static transients = ["children"]

    def getChildren() {
        def childPeoples = People.findAllByParentPeople(this, [sort:'id',order:'asc'])
    }
于 2011-03-22T09:29:31.650 に答える
0

同じ結果を得る別の方法は、名前付きクエリを使用することです。より簡潔に見え、この目的のために特別に作成されました。また、ドメインモデルの静的宣言のパターンに適合し、アプリケーション全体で使用する基本的な基準であるため、これも気に入っています。一時的なものを宣言してからクロージャを作成することは、名前付きクエリを宣言できる場合の少しの回避策のようです...私の意見です。

次のようなものを試してください。

static namedQueries = {
    getChildren {
        projections {
            count "parentPeople"
        }
    }
}
于 2014-06-11T02:41:10.670 に答える