我有一个名为People的Grails域名,我想检查每个人是否有孩子。孩子是其他人物。这是我的域名结构:
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()。你能帮帮忙吗?非常感谢你!
答案 0 :(得分:4)
这是因为在eq ('parentPeople', People)
中,Grails无法理解“People”是什么(它是一个类)。您应该按this
替换“人员”。例如:
static transients = ["children"]
def getChildren() {
def childPeoples = People.findAllByParentPeople(this, [sort:'id',order:'asc'])
}
答案 1 :(得分:0)
获得相同结果的另一种方法是使用Named Queries。它似乎更简洁,专门为此目的而创建。我也喜欢它,因为它符合域模型中静态声明的模式,它本质上是一个标准,我在整个应用程序中使用它。当你可以声明命名查询时,声明一个瞬态,然后编写一个闭包似乎有点解决...只是我的意见。
尝试这样的事情:
static namedQueries = {
getChildren {
projections {
count "parentPeople"
}
}
}