我有以下域对象:
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:为大数据字段创建关联
这个答案的一个建议是将大数据属性分解为一个单独的域,这将导致它懒惰加载.例:
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,如果你能从邮件列表中重新回答你的例子,那就太好了; 因为你值得赞美,所以我会把它从我的产品中删除并提升你的价值.