grails - 带复合键的Grails独立标准

原文 标签 grails composite-key detachedcriteria createcriteria

域设置

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,并且在与研究相同的美国州内

我正在尝试编写一个标准来使它起作用,但似乎无法实现。我需要显示所有处于 Activity 状态的资源,这些资源处于与研究相同的美国州且当前未与站点关联(当前关联在第一个表中)
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的工作原理。如果有更好的方法可以完成此任务,请赐教!

最佳答案

不需要条件构建器。这是我的解决方案:

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])
}

关于grails - 带复合键的Grails独立标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26769757/

相关文章:

grails - 如何为 Grails 域类中的两个字段创建和 XOR 验证?

json - 无法将Grails Controller 的JSON响应发送到jQuery数据表

hibernate - Grails无法解析namedQuery内部的createAlias

grails - Grails复合ID抛出NullPointerException

tsql - 创建复合外键约束

java - JPA中具有复合键的唯一约束

java - Grails 3 加载静态文件

java - 在 Hibernate 中使用 DetachedCriteria 急切地获取嵌套对象

java - Java Hibernate:将当前行ID传递给子查询

c# - NHibernate:获取多个带有子集合子集的实体?