博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hibernate中的Entity类之间的继承关系之一MappedSuperclass
阅读量:4180 次
发布时间:2019-05-26

本文共 2083 字,大约阅读时间需要 6 分钟。

在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 ))

转载地址:http://qnlai.baihongyu.com/

你可能感兴趣的文章
Recycler表格(excelPanel)
查看>>
android一行代码实现沉浸式布局效果
查看>>
json, recyclerView问题
查看>>
cmake处理多源文件目录的方法
查看>>
Service Intent must be explicit
查看>>
android studio SDK开发
查看>>
studio 统计代码的行数
查看>>
字符数组和16进制互换
查看>>
德鲁伊druid 数据源配置
查看>>
NO message found under code 'xxxxx' locale 'zh_CN'
查看>>
Jenkins-部署(一)
查看>>
Jenkins-配置邮箱
查看>>
六、同一个tomcat多个web应用共享session
查看>>
Tomcat配置注意事项
查看>>
Tomcat下面的配置在每次Eclipse编译后,修改好的配置会还原
查看>>
Eclipse代码格式模板导入
查看>>
list与Set、Map区别及适用场景
查看>>
Jenkins自动部署Maven 多个子项目
查看>>
Oracle连接DB2
查看>>
CXF配置
查看>>