Hibernate实体对象继承的映射
标签:
如果实体之间存在继承关系,如User和Student,Teacher,那么对应到数据库表的hibernate映射有3种方式:
1.每个具体类一个表:如上例子,就对应3张表,3个表之间是独立的。可以使用<union-subclass>来映射其关系,还可以直接写3个独立的<class>来映射。用<union-subclass>进行映射,会减小配置文件的大小,但必须要求三个实体的公共属性在数据库中字段名要一致。
2.所有具有继承关系的实体一张表。可以使用<subclass>来进行映射,Chlid表只需要映射自己独立的字段就行了,但在数据库中会有冗余的字段,Student和Teacher实体自己的属性都需要在一张表中,而且表中还需要有一个字段来标识该记录是哪个实体的。
3.每个子类一个表。可以使用<joined-subclass>来进行映射,User表只存公共的字段,而Student和Teacher表分别存自己的字段,但他们各有一个外键和User表相关联。
比较这3种方式,第3种实现应该是最合理的,它的配置相对比较少,而且数据库表结构和字段均没有冗余,但其实现查询是稍微麻烦一些,需要左连接,insert和update时均需要修改2张表的内容。