如何做一个grails findAllBy与一对多的关系

时间:2013-12-18 22:37:09

标签: grails findall

我在User和Task之间有一对多的关系,并希望获得该用户的所有任务,但我的查询没有返回任何结果。这就是我所拥有的:

def getByStatus(String findBy) {
    // either get by Open/Closed or by All.
    def sortPref = [sort: "deadline", order: "asc"]
    def u = User.get(session.user.id) // session.user is a user domain object

    if (findBy != "All")
        tasks = Task.findAllByUserAndStatus(u, findBy, sortPref)
    else
        tasks = Task.findAllByUser(u, sortPref) 

}

我也尝试过.findByUserIdAndStatus进行搜索,但收到错误消息说任务中没有UserId属性。如果我删除用户部分,那么我将完成所有任务。

1 个答案:

答案 0 :(得分:1)

假设延迟加载没有问题(假设每个用户的任务数量不是很高),您可以直接根据用户(从1:M关系)获得所需的任务:

def getByStatus(String findBy) {
    // either get by Open/Closed or by All.
    def u = User.get(session.user.id) // session.user is a user domain object

    def tasks = findBy == 'All' ? u.tasks.sort{it.deadline} :
                      u.tasks.findAll{it.status == findBy}.sort{it.deadline}
}

如果感兴趣,您可以在域类的映射中设置sort