Phi*_*ppe 3 orm grails groovy grails-orm
我正在遗留数据库上创建一个grails应用程序.
有一个表格,我想创建几个不同的域对象(在我的例子中,Type1,Type2和Type3).
表格是这样的:
ID TYPE DESCRIPTION
1 type1 description of a type1 object
2 type1 description of another type1 object
3 type2 description of a type2 object
4 type3 description of a type3 object
...
Run Code Online (Sandbox Code Playgroud)
所以我想创建3个不同的域类,每个类包含一个名为"description"的字段,并且对应于特定的"类型",因为行代表不同的概念.
是否有任何类型的约束允许我按类型过滤行?
我的意思是,我可以这样做:
class Type1 {
String type
String description
static mapping = {
table 'mytable'
}
static constraints = { type == 'type1' } // Is there anything like this ?
}
Run Code Online (Sandbox Code Playgroud)
然后我希望Type1.list()生成如下查询:
SELECT type, description
FROM mytable
WHERE type = 'type1'
Run Code Online (Sandbox Code Playgroud)
更新:
实际上文档说我可以使用鉴别器来实现这一目标.
但是,我尝试按如下方式设置我的课程:
class Type1 extends BaseType {
static mapping = {
discriminator column:'type', value: 'type1'
}
}
Run Code Online (Sandbox Code Playgroud)
我激活了hibernate SQL跟踪,而不是看到
SELECT ... FROM mytable WHERE type = 'type1'
Run Code Online (Sandbox Code Playgroud)
我知道了
SELECT ... FROM mytable WHERE class = 'type1'
Run Code Online (Sandbox Code Playgroud)
似乎鉴别器完全忽略了我的自定义列名:-(
我正在使用Grails 1.2.1
好的,所以Grails文档不是最新的(应该).
解决方案是:
在BaseType类中:
static mapping = { discriminator column:"type" }
Run Code Online (Sandbox Code Playgroud)
在子类中:
static mapping = { discriminator value:"type1" } // or type2, type3, etc...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2674 次 |
| 最近记录: |