如何编写寻找 0 或 null 的 grails 动态查找器

ana*_*ocs 5 grails grails-orm dynamic-finders

编写正在搜索等于 0 或为 null 的标志的 Grails 动态查找器的最佳方法是什么?

例子

class Book {
    String title
    Date releaseDate
    String author
    Boolean paperback
    Integer isArchived
}
Run Code Online (Sandbox Code Playgroud)

isArchived 可以为空。所以查询要么寻找 isArchived = 0 要么如果它是 null 它也希望它在结果中。

编辑:乍一看这个问题似乎我什至没有尝试也没有看文档。我向你保证,我一直在研究和尝试许多不同的事情。

此外,是的,数据库中的布尔标志不应该为空,但此时无法更改表。在这种情况下,开发人员依赖于在域对象中默认将标志的值设置为 0。虽然这在大多数情况下有效,但在某些情况下,标志被设置为 null。

我使用动态查找器尝试了许多不同的方法来执行此操作,但似乎不可能在动态查找器中两次使用同一列。

我会接受答案,“不,这不可能使用动态查找器,只需使用 createCriteria() 方法。” 我只是想确定这是否不可能。

Gre*_*egg 3

如果您使用的 Grails 版本支持的话,您可以使用 where 功能:

def results = Book.where {
    (isArchived == null || isArchived == 0)
}
Run Code Online (Sandbox Code Playgroud)

您还可以使用 HQL:

Book.findAll("from book b where b.isArchived IS NULL or b.isArchived = 0")
Run Code Online (Sandbox Code Playgroud)