我想在派生实例的命名查询中使用继承属性,以便我可以提供自定义的结果排序。我收到了一个错误。
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
}
最后一行允许使用在基类中定义的任何继承的命名查询。
运行调用的集成测试时出现以下错误:
SeasonTicket.locateOrderedSeasonTicketsByUser(someUserInstance)
没有方法签名:com.example.User.call()适用于 参数类型: (com.example.SeasonTicket $ __ clinit__closure2_closure3_closure4) 值: [com.example.SeasonTicket$__clinit__closure2_closure3_closure4@31ee7d7a] 可能的解决方案:wait(),last(),save(),any(),getAll(), 等待(长)
集成测试是我第一次尝试进行简单的测试:
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
}
看起来好像没有识别基类中的用户字段。我做错了什么?
答案 0 :(得分:0)
您的本地参数user
与您的班级属性&#39;用户&#39;之间存在命名冲突。
这部分标准
user {
idEq(user.id)
}
将尝试在您的本地参数user
上调用一个不存在的方法,而不是使用user
的{{1}}属性来修补您的查询。
重命名namedQuery Ticket
的参数。