映射继承关系

1.继承关系树的每一个具体类都对应一个表

      这里的表有A,C,D,三个映射文件
class A{}
class B{private int id;private String name;private A a;}//跟A多对一,是抽象类
class C entends B{private String address;}
class D extends B{private String home}

 A表
int id;
String name;

D表
int id;
String name;String home;
int A_id;//映射文件多对一

C表
int id;
String name;
String address;
int A_id;//映射文件多对一
}

2.继承关系树的根类对应一个表

      这里有A,B表,两个映射文件
class A{}
class B{private int id;private String name;private A a;}//跟A多对一
class C entends B{private String address;}
class D extends B{private String home}
class A {
private int id;
private String name;
private Set BS=new HashSet();//映射文件一对多
}
B表
int id;
String name;
int A_ID;//对应A
String extendType;//用来判断哪个子类的
string    home;
string   address;
}
B的映射文件如下:
<class name  table>//如果B也可以被实例,那么class属性也有discriminator-value属性
<id >//对应id属性
<property>//对应name属性
<many-to-one>//对应a属性
<discriminator column="" type="string"/>//对应extendType属性,判断是哪个子类
<subclass name="子类" discrimiantor-value="">
<property name="home" cloumn>
</subclass>
<subclass name="子类" discrimiantor-value="">
<property name="address" cloumn>
</subclass>

</class>


3.继承关系树的每一个类都对应一个表

      这里有A,B,C,D四张表,只有A,B两个映射文件
class A{}
class B{private int id;private String name;private A a;}//跟A多对一
class C entends B{private String address;}
class D extends B{private String home}
class A {
private int id;
private String name;
private Set BS=new HashSet();//映射文件一对多
}
B的映射文件:
<class>
<id>
<property>
<many-to-one>
<joined-subclass name="子类" table="">//子表
<key column="B_id">//子表把B表的主键作为外键,也作为主键
<property>
</joined-subclass>
</class>



上面讲的是一对多的继承映射,下面将多对一的继承映射。

 
class A{}
class B{private int id;private String name;private Set As;}//跟A一对多
class C entends B{private String address;}
class D extends B{private String home}
1.如果是创建了根类的表或者每一个类对应一个表。
那么A映射文件只要:
<many-to-one name=""
class="B类"
column=
>
       如果是立即检索策略,那么A创建的实例得到的B,可以转为C或者D。如果采用延迟检索策略会报ClassCastException,因为延迟策略返回代理类,转换为具体类可能报错。如果延迟加载,那么可以用load(具体类,OID)返回代理类实例。不过要事先知道具体类,就是A到底与C还是D关联。还有一种办法就是使用迫切的左外连接检索策略,不是创建代理类实例,而是直接创建子类的实例。

2.如果每个具体类对应一个表
A表
id
A_type
A_id
C表和D表要id同类型。
<any  name=""//对应多对一的属性
meta_type=""//A_TYPE类型
id_type=""//A_id类型
>
<meta_value value="" class=""/>//A_type可选值
<meta_value value="" class=""/><column name="A_type"/><column name="A_id">
</any>




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值