我有以下域对象:
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
}
Run Code Online (Sandbox Code Playgroud)
我希望能够运行这样的查询:
DbDeployment.findAllByFabric("f1", params)
Run Code Online (Sandbox Code Playgroud)
但我想确保details不检索列(可能很大).
有没有办法做到这一点?
选项1:为大数据字段创建关联
这个答案的一个建议是将大数据属性分解为一个单独的域,这将导致它懒惰加载.例:
class DbDeployment {
Date startDate = new Date()
Date endDate
...
DbDeploymentDetails details
}
class DbDeploymentDetails {
String details
static belongsTo = DbDeployment
}
Run Code Online (Sandbox Code Playgroud)
选项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'
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以在SimpleDbDeployment上使用finder:
SimpleDbDeployment.findAllByFabric('f1', params)
Run Code Online (Sandbox Code Playgroud)
Burt,如果你能从邮件列表中重新回答你的例子,那就太好了; 因为你值得赞美,所以我会把它从我的产品中删除并提升你的价值.
| 归档时间: |
|
| 查看次数: |
1674 次 |
| 最近记录: |