LegacyOracle-DatabaseをHibernateにマップしようとするといくつか問題が発生します。具体的には、正しい継承マッピングを機能させることができません。私が取り組んできた例は、Person-Employee-Relationshipです。私たちのデータベースでは、テーブルが分離されているため、マッピング戦略のみが結合されます。ここで問題となるのは、EmployeeのPKがEmployeeIdとCompanyIdで構成され、PersonIdが通常のFKであるということです。そして、現在実行中のシステムを台無しにすることなく、それを変更する方法はありません。
PersonとEmployeeの現在のコードは次のとおりです。
Person.class
@Entity
@Table (name = "personas")
@Inheritance (strategy = InheritanceType.JOINED)
public class Person {
private String personId;
private boolean physical;
private String name;
private String fantasyName;
private char gender;
@Id
@Column (name = "cod_persona")
public String getPersonId() {
return personId;
}
public void setPersonId(String personId) {
this.personId = personId;
}
//rest of setters and getters
}
Employee.class:
@Entity
@Table (name = "rh_empleados")
@PrimaryKeyJoinColumn (name = "cod_persona")
public class Employee extends Person {
private Company company;
private String employeeId;
private Integer finalSalary;
private Branch branch;
@Basic (optional = false)
@ManyToOne
@JoinColumn (name = "cod_empresa")
public Company getCompany() {
return company;
}
public void setCompany(Company company) {
this.company = company;
}
@Basic (optional = false)
@Column (name = "cod_empleado")
public String getEmployeeId() {
return employeeId;
}
public void setEmployeeId(String employeeId) {
this.employeeId = employeeId;
}
//rest of setters and getters
}
すでに機能しているもの:新しい従業員または人の作成または削除機能していないもの:既存の従業員または人を選択しても、例外が発生しないか、何かが何も返さない。
継承階層にない別のエンティティでは完全に機能するため、継承と関係がある必要があります。
ヒント/アイデア/回避策はありますか、それとも私は失敗していますか?
すべてをいただければ幸いです。
前もって感謝します。
編集:どうやら、従業員の作成または削除は、どちらかがより理にかなっているようになりました。「内部表現への変換に失敗しました」というメッセージが表示されます。