[Grails] grails Mapping Inheritance 问题
zllsdn
2008-10-14
如果在项目中要把domain共同的属性,抽象成一个共同的基类,该怎么处理。
我做了一下,没弄明白,大家给看看。 首先把代码贴上 基类 class BaseModel { Date createDateTime Date updateDateTime Boolean deleteFlag } Book类 class Book extends BaseModel{ String bookId String bookName String bookNameKana String auther String publisher String isbnCode Byte status } User 类 class User extends BaseModel{ String userName String passwd } 按照grails 默认的映射策略,将会成成一个表,有一个辨别标识(discriminator)列叫 class 。这个不是我期望的,然后又将 BaseModel 类中添加了 static mapping = { tablePerHierarchy false } 会出现3张表,BaseModel,user,book表,但现在我希望将baseModel中的属性添加到user和book表中,改如何做? 是组合关系吗? 难道要改hibernate? |
|
dellsoft
2008-10-15
5.2.2 Composition in GORM As well as association, Grails supports the notion of composition. In this case instead of mapping classes onto separate tables a class can be "embedded" within the current table. For example: class Person { Address homeAddress Address workAddress static embedded = ['homeAddress', 'workAddress'] } class Address { String number String code } 出看 grails 文档,应该有方法满足你的需要 |
|
zllsdn
2008-10-16
谢谢你的回帖
但是不知道你说了个啥 Composition Inheritance |
|
Javabengou
2008-10-16
我个人不赞同你这样设计,虽然做到把不变的部分提取出来
|
|
zllsdn
2008-10-16
是啊,设计的问题,不知道才问的,怎样设计合理,有什么高见。
以前hibernate的时候共通的属性是是抽出来放在基类里,然后配置文件中隐射到子类中 但是grails中,对象和配置是一个文件,所以不知道,这些属性该不该抽了? |
|
Javabengou
2008-10-17
做东西要根据你实际的情况来做,不是说任何事情都是一套规律。1+1=2,如果在纯数学角度上来说是正确的,如果一只鸡+一头狼=1,这又是冲另一个角度来考虑问题,还有,一个男人+一个女人=3,也是不同的角度。
别人的经验是值得借鉴的,但不是“拿来主义”。 |
|
zllsdn
2008-10-21
咋都是给我讲道理的,确实本人需要扶贫,但是我的道理是「进步就是在寻找规律中得到的」。没有前车之鉴,就别在这当教授。
|
|
Javabengou
2008-10-21
我错了!!!!
按照你的意思就是不管这两个类有没有类似性,只要有共同的属性就要定义一个基类,把所有相同的属性都写在基类,对吧? 按照你上面代码的意思,书和人就得定义一个基类,如果还有一个类,也得继承基类,因为很多都需要创建时间,更新时间,标记是否被删除,这些类到底有没有关联?你这样继承到底累不累!我只是说出我的想法!!! |
|
agile_boy
2008-10-21
在继承和组合都可以的情况下,建议使用组合(这是OO的实践原则)
对于你的情况建议采用embedded static embedded = ['homeAddress', 'workAddress'] |
|
Javabengou
2008-10-21
下次不做好人了
这年头做好人做不得 |