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

时间:2015-01-28 09:45:37

标签: 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

    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
}

看起来好像没有识别基类中的用户字段。我做错了什么?

1 个答案:

答案 0 :(得分:0)

您的本地参数user与您的班级属性&#39;用户&#39;之间存在命名冲突。

这部分标准

user {
    idEq(user.id)
}

将尝试在您的本地参数user上调用一个不存在的方法,而不是使用user的{​​{1}}属性来修补您的查询。

重命名namedQuery Ticket的参数。