【问题标题】:How to write a grails dynamic finder looking for 0 or null如何编写寻找 0 或 null 的 grails 动态查找器
【发布时间】:2013-12-12 19:50:33
【问题描述】:

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

例子

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

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

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

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

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

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

【问题讨论】:

  • 看不出有什么理由不赞成这个问题,这很清楚并且很有用。
  • @anataliocs - 放松一下。如果您在开始编辑后将信息放入问题中,您会收到更好的反馈。更好的问题得到更好的答案,这通常归结为更多细节。
  • 我很抱歉,只是问题一开始看起来很简单,但令人沮丧。我尝试添加更多细节以更好地构建我的问题。

标签: grails grails-orm dynamic-finders


【解决方案1】:

如果您使用的 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")

【讨论】:

  • 你能不能用Groovy的道理写Book.where { !isArchived }
  • 为了更好地表达我的问题,最佳做法是什么?由于这似乎是一个简单的查询,我想使用动态查找器,但我对任何事情都持开放态度。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-30
  • 1970-01-01
  • 1970-01-01
  • 2022-12-07
  • 1970-01-01
  • 2015-08-20
  • 1970-01-01
相关资源
最近更新 更多