gpt4 book ai didi

grails - 在hasMany条件中比较属性

转载 作者:行者123 更新时间:2023-12-02 14:42:52 26 4
gpt4 key购买 nike

我有一个像这样的 Realm 类:

class Person {
Team team
static hasMany = [history: PersonHistory]
}

class PersonHistory {
Team team
Person person
}

现在,我想创建一个条件,以拉回所有具有不同团队的PersonH​​istory实例的“人员”。

类似于以下内容:
    def c = Person.createCriteria()
def experiment = c.list {
history {
neProperty("team", history.team)
}
}

但这是抛出的(由于history.team):
Missing Property Exception 
No such property: history for class: grails.orm.HibernateCriteriaBuilder

我可以在一个条件查询中执行此操作吗?如果是这样,怎么办?

最佳答案

我没有测试它,但我认为这应该起作用:

Person.withCriteria {
createAlias 'history', 'h'
ne 'team', h.team
}

您必须为具有历史记录的联接创建别名。

编辑:

现在我明白了!带有以下示例数据:
def t1 = new Team(name: 'team 1').save()
def t2 = new Team(name: 'team 2').save()
def t3 = new Team(name: 'team 3').save()

def p1 = new Person(team: t1).save()
def p2 = new Person(team: t1).save()
def p3 = new Person(team: t2).save()
def p4 = new Person(team: t2).save()
def p5 = new Person(team: t3).save()

def ph1 = new PersonHistory(person: p1, team: t1).save()
def ph2 = new PersonHistory(person: p2, team: t3).save() // t3 instead of t1
def ph3 = new PersonHistory(person: p3, team: t2).save()
def ph4 = new PersonHistory(person: p4, team: t1).save() // t1 instead of t2
def ph5 = new PersonHistory(person: p5, team: t3).save(flush: true)

现在,您可以执行以下条件:
List<Person> persons = PersonHistory.withCriteria {
createAlias 'person', 'p'
neProperty 'p.team', 'team'

projections {
property 'person'
}
}

这将返回正确的人 p2p4

关于grails - 在hasMany条件中比较属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25512382/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com