Grails 在命名查询中使用继承的 属性
Grails use inherited property within named query
我想在派生实例的命名查询中使用继承的 属性,以便我可以提供自定义排序的结果。我收到一个错误。
package com.example
class Ticket {
// User is defined elsewhere
static belongsTo = [user : User]
String idNumber
}
class SeasonTicket extends Ticket {
// some custom properties go here
static namedQueries = {
locateOrderedSeasonTicketsByUser { user ->
// all derived instances are in the same table, hence return only the correct derived instances
eq("class", "com.example.SeasonTicket")
// return a match on user
user {
idEq(user.id)
}
// implement custom order
order "customProperty"
}
} << Ticket.namedQueries
}
最后一行允许使用基 class 中定义的任何继承命名查询。
当 运行 集成测试调用时出现以下错误:
SeasonTicket.locateOrderedSeasonTicketsByUser(someUserInstance)
No signature of method: com.example.User.call() is applicable for
argument types:
(com.example.SeasonTicket$__clinit__closure2_closure3_closure4)
values:
[com.example.SeasonTicket$__clinit__closure2_closure3_closure4@31ee7d7a]
Possible solutions: wait(), last(), save(), any(), getAll(),
wait(long)
集成测试是我第一次尝试简单测试:
void "SeasonTicket.locateOrderedSeasonTicketsByUser finds an object"() {
given:
def seasonTicket = new SeasonTicket()
def user = new User()
user.addToSeasonTickets(seasonTicket)
user.save(flush: true, failOnError: true)
expect: "we can find one season ticket"
SeasonTicket.locateOrderedSeasonTicketsByUser(user).list().size() == 1
}
似乎未识别基 class 中的用户字段。请问我做错了什么?
您的本地参数 user
和您的 class 属性 'user'.
之间存在命名冲突
这部分条件
user {
idEq(user.id)
}
将尝试调用不存在的本地参数 user
上的方法,而不是使用 Ticket
的 user
属性 构建查询。
重命名 namedQuery 的参数 locateOrderedSeasonTicketsByUser
。
我想在派生实例的命名查询中使用继承的 属性,以便我可以提供自定义排序的结果。我收到一个错误。
package com.example
class Ticket {
// User is defined elsewhere
static belongsTo = [user : User]
String idNumber
}
class SeasonTicket extends Ticket {
// some custom properties go here
static namedQueries = {
locateOrderedSeasonTicketsByUser { user ->
// all derived instances are in the same table, hence return only the correct derived instances
eq("class", "com.example.SeasonTicket")
// return a match on user
user {
idEq(user.id)
}
// implement custom order
order "customProperty"
}
} << Ticket.namedQueries
}
最后一行允许使用基 class 中定义的任何继承命名查询。
当 运行 集成测试调用时出现以下错误:
SeasonTicket.locateOrderedSeasonTicketsByUser(someUserInstance)
No signature of method: com.example.User.call() is applicable for argument types: (com.example.SeasonTicket$__clinit__closure2_closure3_closure4) values: [com.example.SeasonTicket$__clinit__closure2_closure3_closure4@31ee7d7a] Possible solutions: wait(), last(), save(), any(), getAll(), wait(long)
集成测试是我第一次尝试简单测试:
void "SeasonTicket.locateOrderedSeasonTicketsByUser finds an object"() {
given:
def seasonTicket = new SeasonTicket()
def user = new User()
user.addToSeasonTickets(seasonTicket)
user.save(flush: true, failOnError: true)
expect: "we can find one season ticket"
SeasonTicket.locateOrderedSeasonTicketsByUser(user).list().size() == 1
}
似乎未识别基 class 中的用户字段。请问我做错了什么?
您的本地参数 user
和您的 class 属性 'user'.
这部分条件
user {
idEq(user.id)
}
将尝试调用不存在的本地参数 user
上的方法,而不是使用 Ticket
的 user
属性 构建查询。
重命名 namedQuery 的参数 locateOrderedSeasonTicketsByUser
。