Hibernate中的Entity类之间的继承关系之一MappedSuperclass
Posted Nihaorz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hibernate中的Entity类之间的继承关系之一MappedSuperclass相关的知识,希望对你有一定的参考价值。
在hibernate中,Entity类可以继承Entity类或非Entity类。但是,关系数据库表之间不存在继承的关系。那么在Entity类之间的继承关系,在数据库表中如何表示呢?
Hibernate提供了4种兼容JPA的策略,解决Entity类的继承与关系数据库表的对应不匹配问题。这里介绍第一种MappedSuperclass。
在这种策略中,存在如下特征:
只在Entity类之间存在继承关系,其中的父Entity类使用@javax.persistence.MappedSuperclass标注。
在关系数据库中没有父Entity类,一个具体子Entity类对应一个表,其中包含一个具体子Entity类的全部属性(包含父Entity类的属性)。
示例中,父Entity类定义如下:
@MappedSuperclass public 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的主要内容,如果未能解决你的问题,请参考以下文章
映射继承关系-002继承关系树中的根类对应一个表(discriminatorsubclass)