Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate GORM条件查询筛选id在列表中的位置_Hibernate_Grails_Gorm_Criteria - Fatal编程技术网

Hibernate GORM条件查询筛选id在列表中的位置

Hibernate GORM条件查询筛选id在列表中的位置,hibernate,grails,gorm,criteria,Hibernate,Grails,Gorm,Criteria,我试图在现有GORM标准中添加一个子句,以进行一些额外的筛选 我的域中有一个组织所拥有的各种对象。例如,产品。组织也可以拥有其他组织。我只希望属于特定组织的用户能够看到属于该组织的域对象或其组织的子组织的域对象 在我的应用程序中,有许多地方需要查询组织所拥有的域对象。我想创建一个DetachedCriteria实例,在需要筛选出用户不允许看到的对象时,我可以在整个应用程序中重用该实例 我已经对我的模型进行了一些非规范化,希望能让事情变得更简单。插入新的组织时,它会递归地将自己添加到其上方每个组织

我试图在现有GORM标准中添加一个子句,以进行一些额外的筛选

我的域中有一个
组织所拥有的各种对象
。例如,
产品
。组织也可以拥有其他组织。我只希望属于特定
组织的
用户
能够看到属于该
组织的域对象
或其
组织的子
组织
的域对象

在我的应用程序中,有许多地方需要查询
组织所拥有的域对象。我想创建一个
DetachedCriteria
实例,在需要筛选出
用户不允许看到的对象时,我可以在整个应用程序中重用该实例

我已经对我的模型进行了一些非规范化,希望能让事情变得更简单。插入新的
组织
时,它会递归地将自己添加到其上方每个
组织
层次组织
集合中

class Organisation {
    ...
    static hasMany = [hierarchyOrganisations: Organisation]
    ...
}
我想要应用组织过滤
DetachedCriteria
的一个地方是Grails的脚手架控制器的
list
方法,因此我需要能够对最终结果集进行分页

Product
controller的list方法为例,我目前正在做类似的事情-

def hierarchyCriteria = new DetachedCriteria(Organisation).build {
    eq('id', currentUserOrganisation.id)
}

def productInstanceList = Product.createCriteria().list {
    inList('parentOrganisation.id', hierarchyCriteria.list().each { organisation -> 
        organisation.hierarchyOrganisations.collect { it.id }
    })
}
…这是可行的,但我认为它不会扩展。我将点击数据库以返回
hierarchyorganizations
的集合,然后在应用程序中对它们进行迭代以提取id,然后再次查询以返回最终过滤的组织列表

如果我使用SQL,我可以使用连接或内部选择,但我似乎无法正确地将其转换为GORM标准dsl

def organisationInstanceList = Organisation.createCriteria().list {
    idEq(currentUserOrganisation.id)
    hierarchyOrganisations{
      //Eagerly fetch all children for the parent org
    }
}

def children = organisationInstanceList?.first().hierarchyOrganisations
我可能过于简化了,但是上面应该给你
父组织和相应的
子组织。你还需要什么

在@Sergio的选项中添加:

非规范化可能是不必要的。数据模型可以用作

class Organisation {
    Organization parent
}
添加新组织时,只需将其映射到相应的父级,即可自动创建层次结构

要从父级获取所有子级(分页),请使用

def children = Organization.findAllByParent(currentUserOrganisation, [max: params.max, offset: params.offset])
我可能过于简化了,但是上面应该给你
父组织和相应的
子组织。你还需要什么

在@Sergio的选项中添加:

非规范化可能是不必要的。数据模型可以用作

class Organisation {
    Organization parent
}
添加新组织时,只需将其映射到相应的父级,即可自动创建层次结构

要从父级获取所有子级(分页),请使用

def children = Organization.findAllByParent(currentUserOrganisation, [max: params.max, offset: params.offset])

我只是使用了一些SQL来扩充标准

通过将
sqlRestriction
块添加到我的标准dsl中,我能够添加一个子选择来应用所需的筛选


我仍然很想知道,仅仅使用grails hibernate标准dsl是否可以做到这一点。

我只是使用了一些SQL来扩充标准

通过将
sqlRestriction
块添加到我的标准dsl中,我能够添加一个子选择来应用所需的筛选


我仍然很想知道,仅仅使用grails hibernate标准dsl是否有可能做到这一点。

也许他想要孩子们,需要对他们进行分页?还添加了这个选项(实际上是一个更简单的选项)@SérgioMichels.:)谢谢你们的回复,伙计们。重新阅读我的问题,我意识到我并没有很清楚地陈述我的需求——我需要查询的不仅仅是层级组织,我需要能够查询我域中的任何对象,并应用“组织过滤器”,以确保我查询返回的每个域对象属于我的层次结构中的一个或多个组织。我重新编写了这个问题,并使用了我域中的另一个对象作为我需要应用过滤器的示例。也许他想要孩子们,需要对他们进行分页?添加了该选项(确实是一个更简单的选项)以及@SérgioMichels.)谢谢你们的回复,伙计们。重新阅读我的问题,我意识到我并没有很清楚地陈述我的需求——我需要查询的不仅仅是层级组织,我需要能够查询我域中的任何对象,并应用“组织过滤器”,以确保我查询返回的每个域对象属于我的层次结构中的一个或多个组织。我重新编写了这个问题,并使用了我所在领域中的另一个对象作为示例,说明我需要对其应用过滤器。