Grails:namedQuery错误:重复的关联路径

时间:2012-02-01 12:49:59

标签: grails named-query

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]

   ...
}

1 个答案:

答案 0 :(得分:2)

我找到了一个可以解释这种行为的JIRA问题http://jira.grails.org/browse/GRAILS-7324。这固定在2.0-M2。可能你在'params'中有一个排序参数'tokens'或'tokens.token'。

您可以删除sort参数,看看它是否可以解决您的问题。如果您绝对需要按“令牌”排序,请考虑升级Grails版本或使用上述问题中的修补程序修补当前版本。