5

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

例子

class Book {
    String title
    Date releaseDate
    String author
    Boolean paperback
    Integer isArchived
}

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

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

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

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

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

4

1 回答 1

3

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

def results = Book.where {
    (isArchived == null || isArchived == 0)
}

您还可以使用 HQL:

Book.findAll("from book b where b.isArchived IS NULL or b.isArchived = 0")
于 2013-12-12T20:27:43.780 回答