Grails 1.3.7
当我尝试调用我的命名查询时,我收到了这个奇怪的错误。它定义如下;
containsQuery { query ->
or{
ilike("name", '%' + query + '%')
ilike("description", '%' + query + '%')
tokens{
ilike("token", '%' + query + '%')
}
}
我得到的错误是:
Error 500: Executing action [list] of controller [net.turkino.tokenadmin.reg.ItemController] caused exception: duplicate association path: tokens
Servlet: grails
URI: /grails/item/list.dispatch
Exception Message: duplicate association path: tokens
Caused by: duplicate association path: tokens
Class: ItemController
At Line: [75]
和第75行是:
items = itemQueryResult.listDistinct(params)
其中itemQueryResult是
itemQueryResult = Item.belongsToOwner(SecurityUtils.subject.principal).containsQuery(params.q)
有什么问题?我不允许在我的namedQuery中使用令牌吗?
更新:有关涉及的域类的信息:
class Item{
... // a lot of fields
static hasMany = [ tokens:TokenTag]
static belongsTo = [owner: User]
static mappedBy = [ tokens: 'item' ]
static mapping = { tokens lazy:false }
... // constraints to fields, named queries etc.
static namedQueries = {
belongsToOwner { email ->
owner{
eq("email", email)
}
}
....
}
}
class TokenTag{
... // fields
String token
String tokenAsQRString
Item item
... // other fields
static belongsTo = [tagSheet:TokenTagSheet]
...
}
答案 0 :(得分:2)
我找到了一个可以解释这种行为的JIRA问题http://jira.grails.org/browse/GRAILS-7324。这固定在2.0-M2。可能你在'params'中有一个排序参数'tokens'或'tokens.token'。
您可以删除sort参数,看看它是否可以解决您的问题。如果您绝对需要按“令牌”排序,请考虑升级Grails版本或使用上述问题中的修补程序修补当前版本。