关于使用hibernate的继承关系映射

09-06-12 snow0613
前言:我们都知道,hibernate是一个很强大的ORM工具,而且几乎屏蔽了数据库的概念。

我现在碰到的问题是:

首先,我设计了一个AbstractEntity类,这是个抽象类,里面包含着若干个属性和与其相对应的get/set方法及部分其他实现。

在我的设计中,我规定所有的实体类都继承该抽象类。设计完实体类,我要做的事情是设计数据库表结构,由于有hibernate这样的框架存在,我可以根据实体类设计出好几套的数据库表结构方案。我采用的方式是每个Entity类对应一张表,由于每个Entity类都继承了AbstractEntity类,也就是说,每张表都有一部分相同的字段。如果我写在mapping文件中,实体类少的话还好管理,一旦多起来,会在配置文件中出现一大堆的重复性代码,这是我非常不愿意看到的。

于是我想到了hibernate的继承关系映射。hibernate提供三种策略,昨天我粗略地看了一下文档,发现第三种策略跟我的想法比较接近,即先根据AbstractEntity类写一个AbstractEntity.hbm.xml的mapping文件, 不过这个文件中的class没有对应任何表,而且class节点的abstract属性应该设置成true。然后所有继承AbstractEntity类的子类的配置文件用union-class节点来进行配置。

然而,这种方式貌似有个要求,即所有继承AbstractEntity类的所有子类的所有对象都必须用唯一的id,也就是说,子类的id生成方式不能使用数据库自带的自增方式。

这种问题请问各位是怎么解决的?

    

snow0613
2009-06-12 16:15
囧,都几个小时过去啦,怎么没人响应一下!

BANQ老大,请问这种问题你们是怎么解决的?

猜你喜欢