Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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
Grails多对多-动态查找器的问题_Grails_Many To Many_Fetch_Dynamic Finders - Fatal编程技术网

Grails多对多-动态查找器的问题

Grails多对多-动态查找器的问题,grails,many-to-many,fetch,dynamic-finders,Grails,Many To Many,Fetch,Dynamic Finders,我希望你们能帮助我,伙计们。不幸的是,谷歌没有帮助我,我在stackoverflow的搜索也没有:-( 我有两个域类人力资源和任务,具有多对多关系 模型定义: 任务: class Tasks { String name static belongsTo = [HumanResource] static hasMany = [humanResources: HumanResource] //also tried but didn't help -> sta

我希望你们能帮助我,伙计们。不幸的是,谷歌没有帮助我,我在stackoverflow的搜索也没有:-(

我有两个域类人力资源任务,具有多对多关系

模型定义:

任务

class Tasks {

    String name

    static belongsTo = [HumanResource]
    static hasMany = [humanResources: HumanResource]
    //also tried but didn't help -> static fetchMode = [humanResources:"eager"]
}
人力资源

class HumanResource {

    String name

    static hasMany = [tasks: Tasks]

}
我还尝试在id字段上添加一个mapping={}的索引,但我也认为这不是解决方案,它没有帮助,而且我认为id字段上已经有了一个索引

因此,我做过但不起作用的是找到给定任务的所有人力资源!任务来自服务,它们已经在服务模型中使用“static fetchMode=[tasks:“eager”]”获取

控制器代码:

def listHumanResourcesFromTasks = {
        def list = HumanResource.findAllByTasks(service.getTasks())

        //and I tried also with an own HashMap but didn't work as well

}
我总是在SQL GrammarException中遇到错误“org.springframework.dao.InvalidDataAccessResourceUsageException”。但我真的不知道为什么。对象“service.getTasks()”已完全填满(正如我在fetchMode=[tasks:“Earge”]中所写的那样)

如果有人能给我一个获胜的暗示,那就太棒了

非常感谢您抽出时间

致以最良好的祝愿


Marco

这种查询不受支持-您通常需要使用HQL或条件查询。但这种查询很简单,因为您具有双向关系。您可以通过以下方式获得
任务集合的所有
人力资源
实例:

def resources = service.getTasks().collect { it.humanResources }.flatten() as Set

它需要是一个
集合
,因为同一个
人力资源
实例可能会出现多次,所以您需要将列表压缩为唯一的实例。

嘿,伯特,非常感谢,这很有效!但我有一个持续的问题。如果我使用您的解决方案,“人力资源”模型已完全填充,将执行许多不必要的hibernate选择。如何在解决方案中“排除”此选项,或者如何在解决方案中委托“收集内容”?我尝试了def resources=service.getTasks().collect{humanResources.id;humanResources.firstName;humanResources.lastName}.flatte()设置好后,我得到了(在5个参考资料的情况下)15个无序且彼此不相关的结果:-(你能给我一个提示吗?再次感谢!Marco