Hibernate Grails在命名查询中使用继承属性

Hibernate Grails在命名查询中使用继承属性,hibernate,grails,gorm,named-query,Hibernate,Grails,Gorm,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

我希望在派生实例的命名查询中使用继承属性,以便提供自定义的结果排序。我犯了一个错误

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
}
方法com.example.User.call()的签名不适用于 参数类型: (com.example.季票$\uuuClinit\uuuClosure2\uClosure3\uClosure4) 价值观: [com.example.季票$\uuu clinit\uuu closure2\uclosure3_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
}

看起来好像基类中的用户字段未被识别。请问我做错了什么?

您的本地参数
user
和类属性“user”之间存在命名冲突

这是你的标准的一部分

user {
    idEq(user.id)
}
将尝试调用本地参数
user
上不存在的方法,而不是使用
Ticket
user
属性构建查询


重命名namedQuery的参数
LocateOrderedSeasonicketsByUser

尝试重命名查询参数。。。查询的
user
参数与
Ticket
类的
user
属性之间似乎存在冲突。请注意,谢谢-我原以为查询中的用户会被视为一个成员变量(即带有隐式“this”)因此,与传递给查询的本地参数不会有冲突。请您添加一个答案,以便我可以接受,好吗?
user {
    idEq(user.id)
}