您的位置:首页 > 其它

Hibernate学习笔记:每个具体的类一张表

2009-08-31 13:28 393 查看
这种做法是不再有父类表,每个子类一个表,子类除了专有字段,还有父类的字段,只有父类有配置文件,父类配置文件通过union-subclass标识子类。
为了不和以前的demo产生冲突,新建表monkey1, tiger1;
monkey1(id, name, zoo_id, age);
tiger1(id, name, zoo_id, kind);
需要注意的是:因为hibernate通过id辨别对象,为了父类不产生冲突,子类不能使用identity, native等主键生成方式。
<hibernate-mapping>
<class name="model.Animal" abstract="true">
<id name="id" column="id">
<generator class="uuid" />
</id>
<property name="name" />
<many-to-one name="zoo" class="model.Zoo" column="zoo_id" />
<union-subclass name="model.Monkey" table="monkey1">
<property name="age" />
</union-subclass>
<union-subclass name="model.Tiger" table="tiger1">
<property name="kind" />
</union-subclass>
</class>
</hibernate-mapping>
<!--
create table monkey1(
id varchar(32) primary key,
name varchar(20) not null,
zoo_id int,
age int
)
create table tiger1(
id varchar(32) primary key,
name varchar(20) not null,
zoo_id int,
kind int
)
-->


以上配置文件要注意两点:
1 class Animal要标识为abstract;否则在查询所有animal的时候会出错;
2 id使用了uuid. 不能用identity, sequence, native等。
写测试用例查询所有的Animal会发现,hibernate通过union来操作的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐