当前位置:  开发笔记 > 运维 > 正文

如何使用动态查找器使用GORM排除某些列?

如何解决《如何使用动态查找器使用GORM排除某些列?》经验,为你挑选了1个好方法。

我有以下域对象:

 class DbDeployment 
 { 
   static constraints = { 
    startDate(nullable: false) 
    endDate(nullable: true) 
    username(nullable: true) 
    fabric(nullable: false) 
    description(nullable: true) 
    status(nullable: true) 
    details(nullable: true) 
   } 

   static mapping = { 
    columns { 
     details type: 'text' 
     } 
   } 

  Date startDate = new Date() 
  Date endDate 
  String username 
  String fabric 
  String description 
  String status 
  String details // xml representation of the plan 
} 

我希望能够运行这样的查询:

DbDeployment.findAllByFabric("f1", params)

但我想确保details不检索列(可能很大).

有没有办法做到这一点?



1> Rob Hruska..:

选项1:为大数据字段创建关联

这个答案的一个建议是将大数据属性分解为一个单独的域,这将导致它懒惰加载.例:

class DbDeployment {
    Date startDate = new Date()
    Date endDate
    ...
    DbDeploymentDetails details
}

class DbDeploymentDetails {
    String details
    static belongsTo = DbDeployment
}

选项2:使用新域+映射到原始表

关于另一个问题的答案链接到Grails邮件列表问题,该问题得到了Burt Beckwith的一个很好的答案,但SO答案没有给出一个例子.为了后人,我会从邮件列表中找出他的例子并将其放在这里.

它涉及创建另一个没有大字段的域类,然后使用其static mapping闭包映射到另一个域的表.

class DbDeployment {
    Date startDate = new Date()
    Date endDate
    ...
    String details
}

class SimpleDbDeployment {
    Date startDate = new Date()
    Date endDate
    ...
    // do not include String details

    static mapping = {
        table 'db_deployment'
    }
}

然后你可以在SimpleDbDeployment上使用finder:

SimpleDbDeployment.findAllByFabric('f1', params)

Burt,如果你能从邮件列表中重新回答你的例子,那就太好了; 因为你值得赞美,所以我会把它从我的产品中删除并提升你的价值.

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有