主頁 > 知識庫 > Hibernate實體對象繼承的三種方法

Hibernate實體對象繼承的三種方法

熱門標(biāo)簽:電銷機器人免培訓(xùn) 潤滑油銷售電銷機器人 電話機器人需要使用網(wǎng)絡(luò)嗎 南通通訊外呼系統(tǒng)產(chǎn)品介紹 海外圖書館地圖標(biāo)注點 如何看懂地圖標(biāo)注點 自繪地圖標(biāo)注數(shù)據(jù) 給地圖標(biāo)注得傭金 外呼系統(tǒng)使用方法

Hibernate實體對象繼承的方法

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

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

@Entity 
@Inheritance(strategy=InheritanceType.SINGLE_TABLE) 
@DiscriminatorColumn(name="discriminator", discriminatorType=DiscriminatorType.STRING)//表示區(qū)分不同的對象的字段名 
@DiscriminatorValue("person")//用來表示該對象是何種對象的,即區(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; 
  } 
   
}  
    

 這種情況父類和所有子類的所有信息都保存在同一張表里面,通過我們指定的@DiscriminatorColumn對應(yīng)的@DiscriminatorValue來區(qū)別不同的類。 當(dāng)沒有指定@DiscriminatorValue的時候?qū)⑹褂萌惷麃碜鳛镈iscriminatorValue。

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

@Entity 
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) 
@TableGenerator(    //一個類一張表,最重要的是要保證它們的id由一個生成器產(chǎn)生,@TableGenerator就是為了控制這個的 
    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)//這個就是用表生成器生成的,用同一個生成器就可以控制它們的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; 
  } 
 
   
} 

         采用表連接的情況,還是每個類擁有自己的一張表,只是子類對應(yīng)的表只保存子類的信息,其父類的信息由父類的表保存。當(dāng)需要獲取子類的完整信息時通過表連接的方式連接子類的表和父類的表獲取對應(yīng)信息??梢栽谧宇惖谋砩蠘?biāo)注@PrimaryKeyJoinColumn(name="foreignKeyName")指明子類表相對于父類表外鍵的名稱。

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

您可能感興趣的文章:
  • 基于spring boot 1.5.4 集成 jpa+hibernate+jdbcTemplate(詳解)
  • 基于Hibernate中配置文件的學(xué)習(xí)(分享)
  • 詳解 hibernate mapping配置
  • Spring Boot + Jpa(Hibernate) 架構(gòu)基本配置詳解
  • java中hibernate二級緩存詳解
  • Hibernate對數(shù)據(jù)庫刪除、查找、更新操作實例代碼
  • 深入理解hibernate的三種狀態(tài)
  • 詳解hibernate自動創(chuàng)建表的配置

標(biāo)簽:內(nèi)江 南京 銅川 廣州 貸款邀約 黃石 樂山 大連

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Hibernate實體對象繼承的三種方法》,本文關(guān)鍵詞  Hibernate,實體,對象,繼承,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Hibernate實體對象繼承的三種方法》相關(guān)的同類信息!
  • 本頁收集關(guān)于Hibernate實體對象繼承的三種方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章