我试图通过子实体的属性创建GORM条件查询过滤。所以有这样的实体:
postsFromFollowedUsersQuery.whereMatchesKeyInQuery(kPAPPhotoUserKey , kPAPActivityToUserKey , followingActivitiesQuery);
现在我尝试选择具有特定类别的PaymentEntries。我正在尝试这样的事情:
class PaymentEntry {
static hasOne = [category: PaymentCategory]
static constraints = {
category(nullable: true)
}
// other stuff
}
class PaymentCategory {
static hasMany = [payments: PaymentEntry]
// other stuff
}
def c = PaymentEntry.createCriteria()
def res = c {
'in'("category", categories)
}
此处列出了之前选择的categories
个实体。
不幸的是,这失败了。 Grails抛出NoSuchMethodException。
答案 0 :(得分:1)
你应该有inList。 试试这个:
def res = c {
inList("category", categories)
}
答案 1 :(得分:0)
有很多问题。 hasOne
用于一对一associations,但实际上您只有一对多。所以第一步是修复关联,可能是这样的:
class PaymentEntry {
static belongsTo = [category: PaymentCategory]
static constraints = {
category(nullable: true)
}
// other stuff
}
class PaymentCategory {
static hasMany = [payments: PaymentEntry]
// other stuff
}
接下来,一旦有了条件实例,就需要调用其中一个方法(例如list()
)来构建和执行查询。
def c = PaymentEntry.createCriteria()
def res = c.list {
'in'("category", categories)
}
相同的更短版本是......
def res = PaymentEntry.withCriteria {
'in'("category", categories)
}
只要您引用in()
,就可以使用inList()
和in
,因为它是一个Groovy关键字。您可以阅读有关条件查询here的更多信息。