[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
下次不做好人了
这年头做好人做不得
Global site tag (gtag.js) - Google Analytics