域名设置
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个列表可供填充研究。 一个是本网站当前关联资源的列表 另一个是可以与站点关联的可用资源列表。这些可用资源由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是如何工作的。如果有更好的方法来完成这项任务请赐教!
答案 0 :(得分:0)
不需要Criteria builder。这是我的解决方案:
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])
}