1

ページネーションを使用する機能が目標ですが、これをどのように処理するかはわかりません。リレーションシップは一方向の hasMany です (以下を参照)。現在のところ、ページネーションなしで正常に動作します(スクリーンショットを参照)。ただし、ページネーションを使用するには、createCriteria を使用するようにコントローラーを変更する必要があります。これは、関係にとって非常に奇妙であるため、私が困難になるところです。

ドメイン

Class Tag {

      String Tag
      User user

      static hasMany = [events: Event]
}

コントローラ

def searchTags() {
    println("TAG CONTROLLER  -  Params sent on click of tag are:  "+params.selected)
    def results = Tag.findByTagAndUser(params.selected, lookupPerson())

    //resultTotal is for show for the time being 
    [query: params.selected, results: results, resultTotal: 0]
}

GSP

<g:each in="${results.events}" status="i" var="t">
   .... ommited as unnessary
</g:each>

//Not working yet due to confusing createCriteria issue
<div class="pagination">
    <g:paginate total="${resultTotal}" />
</div>

これは私が今のところ考えていることですが、少し混乱しています:

    def tagCriteria = Tag.createCriteria()
    def result = tagCriteria.list (max: 50, offset: 10) {
        eq("tag", params.selected)
        and {
            eq("user", lookupPerson())
        }
        //Not sure what to do at this point compared with the findByTagAndUser(params.selected, lookupPerson()).events  events being the hasMany relationship seen in domain
        events {

        }
    }
4

1 に答える 1

0

これを試してみてください。

def searchTags() {        
    def tagCriteria = Tag.createCriteria()
    def results = tagCriteria.list (max: 50, offset: 10) {

        eq("tag", params.selected)
        eq("user", lookupPerson())            

        projections {
            property("events")
        }
    }

    [query: params.selected, results: results, resultTotal: results.totalCount]
}

HQL バージョン - 問題は、同じクエリを 2 回実行する必要があることですが、count(e)

Tag.executeQuery("""
Select e
from Tag t join t.events as e
where t.tag = :selected
and t.user = :user
""", [selected: params.selected, user: lookupPerson()], [max: 50, offset 10])
于 2013-03-03T13:29:59.070 に答える