Hibernate学习笔记:继承映射之每个子类一张表,使用辨别标志
2009-08-31 10:10
639 查看
继承映射之每个子类一张表,使用辨别标志:父类和子类分放在不同的表中,子类通过父类id与父类关联,父类有一个字段来标名该纪录是哪个子类。只有父类有配置文件,父类中通过subclass -> join标识子类。
以前面的每个子类一张表为基础,表关系保持不变,给animal1表添加一个字段animal_type: alter table animal1 add animal_type varchar(10), 该字段用来表明animal是哪种动物。pojo,dao都保持不变。只需要修改一下映射文件:
Animal.hbm.xml:
测试用例:
可以看到,当insert的时候,产生两条sql:
insert into animal1 (name, zoo_id, animal_type) values (?, ?, 'MONKEY')
insert into monkey (age, animal_id) values (?, ?)
以前面的每个子类一张表为基础,表关系保持不变,给animal1表添加一个字段animal_type: alter table animal1 add animal_type varchar(10), 该字段用来表明animal是哪种动物。pojo,dao都保持不变。只需要修改一下映射文件:
Animal.hbm.xml:
<hibernate-mapping package="model"> <class name="Animal" table="animal1" schema="dbo" catalog="hibernate"> <id name="id" column="id"> <generator class="native" /> </id> <discriminator column="animal_type" type="string" /> <property name="name" /> <many-to-one name="zoo" class="model.Zoo" column="zoo_id" /> <subclass name="model.Monkey" discriminator-value="MONKEY"> <join table="monkey"> <key column="animal_id" /> <property name="age" /> </join> </subclass> <subclass name="model.Tiger" discriminator-value="TIGER"> <join table="tiger"> <key column="animal_id" /> <property name="kind" /> </join> </subclass> </class> </hibernate-mapping> <!-- alter table animal1 add animal_type varchar(10) update animal1 set animal_type='TIGER' where id >=6 alter table animal1 alter column animal_type varchar(10) not null -->
测试用例:
public static void main(String[] args){ AnimalDao dao = new AnimalHibernateDao(); List l = dao.listMonkdy(); System.out.println(l.size()); Monkey m = new Monkey(); Zoo z = dao.getZooById(1); m.setAge(14); m.setName("jinggang"); m.setZoo(z); dao.save(m); }
可以看到,当insert的时候,产生两条sql:
insert into animal1 (name, zoo_id, animal_type) values (?, ?, 'MONKEY')
insert into monkey (age, animal_id) values (?, ?)
相关文章推荐
- Hibernate学习笔记:混合使用每个继承结构一张表 和 每个子类一张表
- Hibernate学习笔记:继承映射之每个子类一张表
- Hibernate学习笔记:继承映射之每个类继承结构一张表
- Hibernate映射类继承之每个带有隐式多态的具体类一张表(每个子类各一张表,有各自的映射文件)
- Hibernate学习18 -- 关联映射8 -- 继承映射2 -- 父类存储在一张表,子类分别存储一张表
- Hibernate映射类继承之每个带有联合的具体类一张表(每个子类各一张表,共用一个父类映射文件)
- Hibernate继承映射:每个子类一张表(joined-subclass)表结构
- Hibernate继承映射:每个子类一张表(joined-subclass)表结构
- Hibernate学习19 -- 关联映射9 -- 继承映射3 -- 子类分别存储一张表
- hibernate继承关系映射关系方法(二)--每个子类一张表
- hibernate继承映射策略之每个子类一张表
- Hibernate继承映射方式之每个子类一张表
- hibernate继承映射之每个子类一张表(无辨识)
- Hibernate学习笔记:每个具体的类一张表
- Hibernate继承映射之每个类一张表
- hibernate继承映射策略之每个具体类一张表
- Hibernate继承映射之每个具体类一张表
- Hibernate 继承映射实现方式之每个具体类对应一张表
- Hibernate学习笔记----映射继承关系
- 使用JPA的@SecondaryTable来实现hibernate的混合使用“每个类分层结构一张表”和“每个子类一张表”的功能