君不见长松卧壑困风霜,时来屹立扶明堂。这篇文章主要讲述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】
推荐阅读
- Android 优雅的让Fragment监听返回键
- Android : 下载内核源码 and 编译打包
- 如何设置电脑共享文件夹?本文教你设置办法
- 如何更改电脑日期?本文教你然后更改
- 如何恢复电脑误删文件?本文教你如何恢复
- 电脑蓝屏代码0x000007b,本文教你怎样办
- 电脑蓝屏代码0x0000007e,本文教你怎样办
- 电脑怎样设置定时断网,本文教你怎样设置
- 如何选购笔记本电脑,本文教你如何选购