1

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]

   ...
}
4

1 に答える 1

2

この動作を説明している可能性のある JIRA の問題http://jira.grails.org/browse/GRAILS-7324を見つけました。これは 2.0-M2 で修正されました。おそらく、「params」にソートパラメータ「tokens」または「tokens.token」があります。

sort パラメータを削除して、問題が解決するかどうかを確認できます。絶対に「トークン」でソートする必要がある場合は、Grails のバージョンをアップグレードするか、上記の問題を修正して現在のバージョンにパッチを適用することを検討してください。

于 2012-02-21T08:43:10.340 に答える