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)
}