生活随笔
收集整理的這篇文章主要介紹了
Hibernate4继承映射
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Hibernate 支持三種基本的繼承映射策略:
1、單表繼承:每棵類繼承樹使用一個表
2、具體表繼承:每個子類一個表
3、類表繼承:每個具體類一個表(有一些限制)
三種方式的比較:
1、所有類映射成一張表會產生數據冗余(不過這是通常采用的方法)
2、每個類映射成一張表會有效率問題,比如是三層或四層結構時,對于查詢或更新會發出很多sql語句
3、具體類映射成表的缺點是主鍵不能自增
結論:使用第一種方式
?
Java代碼 ?
??public?class?Animal?{????????private?Integer?id;??????private?String?name;??????private?String?type;??????????}??
?
Java代碼 ?
??public?class?Pig?extends?Animal?{????????private?Double?weight;??????????????}??
?
Java代碼 ?
??public?class?Bird?extends?Animal{????????private?String?color;??????????????}??
?
Xml代碼 ?
<hibernate-mapping?package="org.monday.hibernate4.domain">??????<class?name="Animal"?table="tbl_animal">??????????<id?name="id">??????????????<generator?class="identity"?/>??????????</id>????????????????????<discriminator?column="type"?type="string"?/>??????????<property?name="name"?/>????????????????????<subclass?name="Pig"?discriminator-value="p">??????????????<property?name="weight"?/>??????????</subclass>????????????????????<subclass?name="Bird"?discriminator-value="b">??????????????<property?name="color"?/>??????????</subclass>??????</class>??</hibernate-mapping>??
?下面是基于注解的
?
Java代碼 ?
??@Entity??@Table(name?=?"tbl_animal")??@Inheritance(strategy?=?InheritanceType.SINGLE_TABLE)??@DiscriminatorColumn(name?=?"type",?discriminatorType?=?DiscriminatorType.STRING)??@DiscriminatorValue("a")??public?class?Animal?{????????@Id??????@GeneratedValue(strategy?=?GenerationType.IDENTITY)??????private?Integer?id;????????private?String?name;??????????}??
?
Java代碼 ?
??@Entity??@DiscriminatorValue("p")??public?class?Pig?extends?Animal?{????????private?Double?weight;??????????????}??
?
Java代碼 ?
??@Entity??@DiscriminatorValue("b")??public?class?Bird?extends?Animal?{????????private?String?color;??????????}?
總結
以上是生活随笔為你收集整理的Hibernate4继承映射的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。