저는 리팩터링을 사용하여 재사용 성을 높이기 위해 노력하고있는 멋진 코드를 물려 받았습니다. 주로 3 열 (id
, report_type_fk
및 report_description
)로 구성된보고 표 집합이 있습니다. 모든 보고서 테이블을 하나로 병합하여 사용하기 쉽도록하고 싶습니다.@MappedSuperclass 및 구현 테이블
코드를 리팩터링하고 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;
...
...
}
CreditReport 클래스
@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] (http://stackoverflow.com/questions/5257921/hibernate-how-override-an-attribute-from-mapped-super-class/5258090#5258090)을 확인하십시오. 문제. –
@AlexanderBischof - 여러 개의 구체적인 구현이 동일한 테이블에 저장되는 예는 표시되지 않습니다. – Dan