0

ドメインのセットアップ。

Study {
    Long id
    String name
    Site site
    USState state
    ...
}

.

Site {
    Long id
    String name
    ...
}

.

Resource {
    Long id
    String name
    Boolean active
    USState state
    ...
}

.

SiteResource {
    id composite: ['site', 'resource']
    Site site
    Resource resource
}

スタディ用に入力される 2 つのリストがあります。1 つは、サイトに現在関連付けられているリソースのリストです。もう 1 つは、サイトに関連付けることができる利用可能なリソースのリストです。これらの利用可能なリソースは、Active = true であり、スタディと同じ USState 内にあることによって決定されます。

これを機能させるための基準を書き込もうとしていますが、取得できないようです。アクティブであり、スタディと同じ USState にあり、現在サイトに関連付けられていないすべてのリソースを表示する必要があります (現在の関連付けは最初の表にあります)。

return Resource.createCriteria().list(sort: params.sort, order: params.order, max: params.max, offset: params.offset) {
        if (params.searchText) {
            ilike("name",  "%${params.searchText}%")
        }

        eq("usState", params.state)
        eq("active", true)

        ne "id" , new DetachedCriteria(SiteResource).build {
            'in' ("resource", params.associatedResources.resource.id)
            'in' ("site", params.associatedResources.site.id)
        }
    }

私も次のことを試しました:

def siteResources = getSiteResourcesBySite(site).collect {
    it.resource
}

def resources = resource.findAllByRefugeAndActiveNotInList(refuge, true, siteResources, [sort:"name"])

return resources.list(sort: params.sort, order: params.order, max: params.max, offset: params.offset)

これが理にかなっていることを願っています。私はまだ DetachedQuery がどのように機能するかを理解しようとしています。このタスクを達成するためのより良い方法があれば、教えてください!

4

1 に答える 1

0

基準ビルダーは必要ありませんでした。これが私の解決策です:

def site = siteService.getSite(params.siteId)
def stateCode = site.study.state.code
def state= State.findByCode(stateCode )

List<Resource> associatedResources = siteResourceService.getAssociatedResourcesBySite(site).collect { it.id }

params.state = state
params.site = site

...

def getUnassociatedResourcesByState(params, List associatedResources) {
    params.max = Math.min(params.max ? Integer.parseInt(params.max) : 25, 100)
    params.offset =  params.offset ? params.offset : 0
    params.sort = params.sort ? params.sort : 'name'
    params.order = params.order == 'desc' ? params.order : 'asc'

    return Resource.findAllByStateAndActiveAndIdNotInList(params.state, true, associatedResources, [sort: params.sort, order: params.order, max: params.max, offset: params.offset])
}
于 2014-11-06T19:08:24.453 に答える