写一个正在搜索等于0或为空的标志的Grails动态查找器的最佳方法是什么?
实施例
class Book {
String title
Date releaseDate
String author
Boolean paperback
Integer isArchived
}
isArchived可以为空。因此查询要么是查找isArchived = 0,要么是null,它也希望它在结果中。
编辑:乍一看这个问题似乎我甚至没有尝试,也没有看过文档。我向你保证,我一直在研究和尝试许多不同的事情。此外,是的,数据库中的布尔标志不应该是可空的,但此时无法更改表。在这种情况下,开发人员依赖于在域对象中默认将标志的值设置为0。虽然这在大多数情况下都有效,但在某些情况下,标志设置为null。
我尝试过使用动态查找程序执行此操作的许多不同方法,但似乎无法在动态查找程序中使用相同的列两次。
我会接受这样的答案:“使用动态查找器不可能只使用createCriteria()方法。”我只是想知道这是不可能的。
答案 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")