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

时间:2013-12-12 19:50:33

标签: grails gorm dynamic-finders

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

实施例

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

isArchived可以为空。因此查询要么是查找isArchived = 0,要么是null,它也希望它在结果中。

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

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

我尝试过使用动态查找程序执行此操作的许多不同方法,但似乎无法在动态查找程序中使用相同的列两次。

我会接受这样的答案:“使用动态查找器不可能只使用createCriteria()方法。”我只是想知道这是不可能的。

1 个答案:

答案 0 :(得分: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")