Hibernate中的Entity類之間的繼承關係之一MappedSuperclass

來源:互聯網
上載者:User

標籤:extend   target   tac   null   via   屬性   return   log   create   

在hibernate中,Entity類可以繼承Entity類或非Entity類。但是,關聯式資料庫表之間不存在繼承的關係。那麼在Entity類之間的繼承關係,在資料庫表中如何表示呢?

Hibernate提供了4種相容JPA的策略,解決Entity類的繼承與關聯式資料庫表的對應不匹配問題。這裡介紹第一種MappedSuperclass。

在這種策略中,存在如下特徵:

只在Entity類之間存在繼承關係,其中的父Entity類使用@javax.persistence.MappedSuperclass標註。

在關聯式資料庫中沒有父Entity類,一個具體子Entity類對應一個表,其中包含一個具體子Entity類的全部屬性(包含父Entity類的屬性)。

樣本中,父Entity類定義如下:

@MappedSuperclasspublic static class Account {    @Id    private Long id;    private String owner;    private BigDecimal balance;    private BigDecimal interestRate;    public Long getId() {        return id;    }    public void setId(Long id) {        this.id = id;    }    public String getOwner() {        return owner;    }    public void setOwner(String owner) {        this.owner = owner;    }    public BigDecimal getBalance() {        return balance;    }    public void setBalance(BigDecimal balance) {        this.balance = balance;    }    public BigDecimal getInterestRate() {        return interestRate;    }    public void setInterestRate(BigDecimal interestRate) {        this.interestRate = interestRate;    }}

  

子Entity類定義如下:

@Entity(name = "DebitAccount")public static class DebitAccount extends Account {    private BigDecimal overdraftFee;    public BigDecimal getOverdraftFee() {        return overdraftFee;    }    public void setOverdraftFee(BigDecimal overdraftFee) {        this.overdraftFee = overdraftFee;    }}

  

另一個子Entity類定義如下:

@Entity(name = "CreditAccount")public static class CreditAccount extends Account {    private BigDecimal creditLimit;    public BigDecimal getCreditLimit() {        return creditLimit;    }    public void setCreditLimit(BigDecimal creditLimit) {        this.creditLimit = creditLimit;    }}

  

資料庫表結構如下:

CREATE TABLE DebitAccount (      id BIGINT NOT NULL ,      balance NUMERIC(19, 2) ,      interestRate NUMERIC(19, 2) ,      owner VARCHAR(255) ,      overdraftFee NUMERIC(19, 2) ,      PRIMARY KEY ( id )  )    CREATE TABLE CreditAccount (      id BIGINT NOT NULL ,      balance NUMERIC(19, 2) ,      interestRate NUMERIC(19, 2) ,      owner VARCHAR(255) ,      creditLimit NUMERIC(19, 2) ,      PRIMARY KEY ( id )  )  

  

via:http://blog.csdn.net/taiyangdao/article/details/51578386

 

Hibernate中的Entity類之間的繼承關係之一MappedSuperclass

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.