国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > JSP > 正文

Hibernate實(shí)體對(duì)象繼承的三種方法

2024-09-05 00:23:08
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

Hibernate實(shí)體對(duì)象繼承的方法

   hibernate繼承策略總共有三種,一種是共用一張表;一種是每個(gè)類一張表,表里面儲(chǔ)存子類的信息和父類的信息;還有一種是通過(guò)表連接的方式,每個(gè)類都有一張表,但是子類對(duì)應(yīng)的表只保存自己的信息,父類對(duì)應(yīng)的表保存父類的信息,它們之間通過(guò)子類表和父類表的關(guān)聯(lián)來(lái)獲取所有的信息。

第一種方式,即共用一張表:

@Entity @Inheritance(strategy=InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name="discriminator", discriminatorType=DiscriminatorType.STRING)//表示區(qū)分不同的對(duì)象的字段名 @DiscriminatorValue("person")//用來(lái)表示該對(duì)象是何種對(duì)象的,即區(qū)分器 public class Parent {   private int id;   private String name;      @Id   @GeneratedValue   public int getId() {     return id;   }   public void setId(int id) {     this.id = id;   }   public String getName() {     return name;   }   public void setName(String name) {     this.name = name;   }  }  @Entity @DiscriminatorValue("child1") public class Child1 extends Parent {   private String email;    public String getEmail() {     return title;   }    public void setEmail(String email) {     this.email = email;   }     }    @Entity @DiscriminatorValue("child2") public class Child2 extends Parent {      private String address;    public String getAddress() {     return score;   }    public void setAddress(String address) {     this.address = address;   }    }      

 這種情況父類和所有子類的所有信息都保存在同一張表里面,通過(guò)我們指定的@DiscriminatorColumn對(duì)應(yīng)的@DiscriminatorValue來(lái)區(qū)別不同的類。 當(dāng)沒(méi)有指定@DiscriminatorValue的時(shí)候?qū)⑹褂萌惷麃?lái)作為DiscriminatorValue。

第二種策略是每個(gè)類一張表,保存所有信息:

@Entity @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) @TableGenerator(    //一個(gè)類一張表,最重要的是要保證它們的id由一個(gè)生成器產(chǎn)生,@TableGenerator就是為了控制這個(gè)的     name="t_gen",     table="t_gen_table",     pkColumnName="t_pk",     valueColumnName="t_value",     pkColumnValue="person_pk",     initialValue=1,     allocationSize=1     ) public class Parent {   private int id;   private String name;      @Id   @GeneratedValue(generator="t_gen", strategy=GenerationType.TABLE)//這個(gè)就是用表生成器生成的,用同一個(gè)生成器就可以控制它們的id不重復(fù)   public int getId() {     return id;   }   public void setId(int id) {     this.id = id;   }   public String getName() {     return name;   }   public void setName(String name) {     this.name = name;   }  }   @Entity public class Child2 extends Parent {      private String address;    public String getAddress() {     return score;   }    public void setAddress(String address) {     this.address = address;   }    }   @Entity public class Child1 extends Parent {   private String email;    public String getEmail() {     return title;   }    public void setEmail(String email) {     this.email = email;   }     } 

弟三種方式是采用表連接的方式:

@Entity @Inheritance(strategy=InheritanceType.JOINED)  public class Parent {   private int id;   private String name;      @Id   @GeneratedValue   public int getId() {     return id;   }   public void setId(int id) {     this.id = id;   }   public String getName() {     return name;   }   public void setName(String name) {     this.name = name;   }  }  @Entity public class Child2 extends Parent {      private String address;    public String getAddress() {     return score;   }    public void setAddress(String address) {     this.address = address;   }    }   @Entity public class Child1 extends Parent {   private String email;    public String getEmail() {     return title;   }    public void setEmail(String email) {     this.email = email;   }     } 

         采用表連接的情況,還是每個(gè)類擁有自己的一張表,只是子類對(duì)應(yīng)的表只保存子類的信息,其父類的信息由父類的表保存。當(dāng)需要獲取子類的完整信息時(shí)通過(guò)表連接的方式連接子類的表和父類的表獲取對(duì)應(yīng)信息。可以在子類的表上標(biāo)注@PrimaryKeyJoinColumn(name="foreignKeyName")指明子類表相對(duì)于父類表外鍵的名稱。

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到JSP教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 伊宁县| 科技| 新民市| 报价| 正蓝旗| 吴江市| 泰州市| 敖汉旗| 曲麻莱县| 增城市| 新绛县| 图木舒克市| 东宁县| 淮北市| 上思县| 赤峰市| 五寨县| 弥渡县| 福安市| 长宁区| 都安| 洛浦县| 太白县| 韶山市| 泰顺县| 鹿邑县| 台北县| 隆子县| 阿拉善盟| 莱阳市| 花莲县| 屏边| 霍城县| 壤塘县| 博白县| 新泰市| 潞城市| 咸丰县| 顺义区| 宁津县| 石阡县|