【问题标题】:Grails createCriteria() used inside Domain classes域类中使用的 Grails createCriteria()
【发布时间】:2017-11-13 10:16:44
【问题描述】:

刚刚了解了 createCriteria() 方法的功能。只是想知道除了将它应用到控制器上之外,还有没有办法应用到域类上?可能在其自身映射到如下属性:

static mapping = {
      additionalInfo: Page.createCriteria().list()
}

【问题讨论】:

  • 为什么是映射?为什么不List<Page> getPages() { Page.createCriteria().list() as List<Page>}List<Page> getPages() { Page.findAllByClassName(this) as List<Page> }

标签: grails grails-domain-class grails-controller


【解决方案1】:

也许您可能只想创建一个基于 目标字段 的新 字段,如下例所示:

class myInfo {
    String additionalInfo
    String[] moreInfo  // a transient field

    getMoreInfo(){
        def myresultmap = createCriteria.list{
         // insert any other criteria shenanigans
        }
        return myresultmap
    }
    static transients = ['moreInfo']
}

在控制器中返回一个与 MyInfo 类的 Domain 实例一样的视图 然后在视图中使用:

<g:each in="${domaininstancefromcontroller}">
${it.moreInfo[0]
</g:each>

docs。 希望这会有所帮助。

【讨论】:

  • 通常当您只有一种类型时,即通常是 Getter。就 GORM 而言,它已经是一个瞬态属性,只有当您应用 bot get 和 set 一些您希望将其声明为瞬态的东西时。我的 List 示例的另一件事是,如果要使用 @CompileStatic 并且该方法具有它引用的静态调用方法,则该模型操作系统可以安全编译...
  • 嗨,我尝试了这个例子,如何在我的控制器上添加?试图 println myInfo.getMoreInfo() 给了我 groovy.lang.MissingPropertyException
  • oodlestechnologies.com/blogs/… 尝试查看一些已经完成的示例 - 例如,spring security 在用户类中为您生成 getter。 github.com/grails-plugins/grails-spring-security-core/blob/… 要么通过安装插件并使用它做一些基础知识来解决问题,要么看看这个例子,如果你愿意,你也可以在你的 getter 中编写 hql 查询
  • 瞬态不是持久的,所以要么像示例那样在域中进行计算并显示在视图中,要么在控制器中进行计算并显示在视图中
  • @Derrick 另外,如果这有帮助,请检查答案是否正确
【解决方案2】:

只想知道除了在Controller上应用它之外,是 有没有办法应用到域类上?

条件查询不限于控制器,您可以使用与在控制器中相同的语法将它们应用到其他地方。但是,您展示的特定示例可能会出现问题,因为您尝试在用于配置 GORM 的 mapping 块内使用 GORM。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    • 2019-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多