【发布时间】:2017-03-27 23:27:36
【问题描述】:
我继承了一些非常糟糕的代码,我希望对其进行重构以提高可重用性。有一组报告表,主要由 3 列组成:id、report_type_fk 和 report_description。为了便于使用,我想将所有报告表合并为一个。
我正在重构代码,并认为最好将我们当前的实体分解,以便 Report 是具有 type 实现的抽象类。例如DmvReport extends Report、CreditScoreReport extends Report等。
我遇到的问题是所有实体都需要保存到 1 个报告表。有没有办法让abstract Report对象的所有具体实现都保存到同一张表中?
这是我继承的错误代码示例
报告类
@Entity
@Table(name = "report")
public class Report<E extends Exception> {
private long id;
private ReportType type;
private String description;
...
...
}
信用报告类
@Entity
@Table(name = "credit_report")
public class CreditScore Report<E extends Exception> extends Report<E> {
private long id;
private ReportType type;
private String description;
...
...
}
我想把它变成:
@MappedSuperclass
@Table(name = "report")
public abstract class Report<E extends Exception> {
@Id @Column(name="id")
private long id;
@OneToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "report_type_id")
private ReportType type;
@column(name="description")
private String description;
...
...
}
@Entity
@Table(name = "report")
public class CreditScoreReport<E extends Exception> extends Report<E> {
public void doCreditScoreStuff(){
...
}
}
@Entity
@Table(name = "report")
public class DmvReport<E extends Exception> extends Report<E> {
public void doDmvStuff(){
...
}
}
【问题讨论】:
-
看看this,它应该已经涵盖了您的问题。
-
@AlexanderBischof - 我没有看到任何将多个具体实现保存到同一张表的示例。
标签: java jpa inheritance mappedsuperclass