2012-05-11 8 views
0

私は、ドメインクラスと呼ばれるイベントがありませんのGrailsのexecuteQueryは私を与える「そのようなプロパティ」例外

Event.executeQuery("select distinct e.eventID from Event e", [max: max, offset: offset]) 

the grails docsによるとうまくいくはずです。しかし、私はこのエラーが発生しています:

| Error 2012-05-10 18:14:09,643 [http-bio-8080-exec-9] ERROR errors.GrailsExceptionResolver - MissingPropertyException occurred when processing request: [POST] /events/event/list - 
No such property: id for class: java.lang.String. Stacktrace follows: 
Message: No such property: id for class: java.lang.String 

Line | Method 
->> 35 | run     in C__src_Event_events_grails_app_views_event__List_gsp 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|  18 | render . . . . . . in org.events.EventController 
|  67 | list . . . . . . . in  '' 
| 1110 | runWorker   in java.util.concurrent.ThreadPoolExecutor 
| 603 | run . . . . . . . . in java.util.concurrent.ThreadPoolExecutor$Worker 
^ 722 | run     in java.lang.Thread 

私はかなりgrailsに新しいですし、どんな助けも大歓迎です。 Btw私はGrails 2.0.1を使用しています。

答えて

2

ページングパラメータ(maxとoffset)を含めると、フレームワークがPagedResultListを作成しようとしているという問題があります。

PagedResultListは、IDを持つドメインオブジェクトを保持する必要があります。

ただし、select文は文字列を返します。そのため、Stringクラスにはid属性がないというメッセージが表示されます。

ページングパラメータを削除しても機能するはずです。文字列リストを取得するだけです。

+0

GreyBeardGeekさん、ありがとうございます。しかし、Grailsのdocs [リンク](http://grails.org/doc/2.0.x/ref/Domain%20Classes/executeQuery.html)(上から3番目)によれば、これは儀式を行うべきでしょうか? – vprasad

+0

クエリにはpositionalParametersがありません。そのページで指摘されているクエリには、定位置のパラメータがあります。 –

+0

try Event.executeQuery( "イベントeから別のe.eventIDを選択する"、null、[max:max、offset:offset]) – jenk

0

私は答えを見つけました。これを行うには2通りの方法があります。 GreyBeardedGeekの反応は部分的に正しい。

まずメソッド

def eveIdList = Event.executeQuery("select distinct e.eventID from Event e", [max: max, offset: offset]) 

第2の方法 EVENTIDSのリストを取得します。

def eveIdList = Event.createCriteria().list{ 
    projections{ 
     distinct("eventID") 
    } 
    firstResult(offset?:0) 
    maxResults(max?:10) 
} 

私はmaxとオフセット長= WITH文字列のリストを得ました。 eventID文字列ごとにString.idを実行しようとしていたため、エラーが発生しました。対応のeventIDでドメインオブジェクトを取得するためには、私はこれをやっている:私は

  • を持って

    def eveList = [] 
    eveIdList.each{ 
        eveList << Event.findByEventID(it as String) 
    } 
    

    質問は、彼らが効率的か?

  • もう一方の方法より効率的ですか?
  • この問題を解決する良い方法はありますか?
関連する問題