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 上的方法,而不是使用 Ticketuser 属性 构建查询。

重命名 namedQuery 的参数 locateOrderedSeasonTicketsByUser