关于空关联的Grails GORM标准

时间:2015-09-23 23:32:11

标签: grails gorm

我有一个域对象,其中包含一个关联的域对象,我希望它能够作为查询的一部分进行搜索。

以Book模型为例,我有:

public class Book{
    Author author
    String title
}

public class Author{
    String name
}

..并希望过滤如下:

def book = Book.withCriteria{
    or{
        ilike(title, "%" + params.filter + "%")
        author{
            ilike("name", "%" + params.filter + "%")
        }
    }
}

我遇到的问题是,如果我在查询中包含作者,那么任何"图书"即使标题匹配,也不会返回空作者。

1 个答案:

答案 0 :(得分:1)

这可能是由于Book和Author之间创建了隐式内部联接。尝试使用左外连接,如下所示:

def book = Book.withCriteria{
    createAlias 'author', 'auth', org.hibernate.sql.JoinType.LEFT_OUTER_JOIN
    or{
        ilike(title, "%" + params.filter + "%")
        ilike("auth.name", "%" + params.filter + "%")
    }
}