好的,我们的数据库团队提出了以下结构。我无法改变它:
报告
- 具有参考编号 (REF_NR) 作为其 PID
- 加上一些关于报告、报告日期等的数据
财产
- 具有参考编号 (REF_NR)和建筑物编号 (BLG_NR) 作为其复合 PID。报告的 REF_NR 将与报告中所有属性的 REF_NR 匹配,这些属性由其 BLG_NR 进一步索引。
- 加上一些关于建筑、平方英尺等的数据
施工数据
- 具有参考编号 (REF_NR)、建筑编号 (BLG_NR)、结构类型代码 (STRCT_TYP_CD) 和材料类型代码 (MTRL_TYP_CD)
- 具有一个值,该值通常表示给定结构类型的 %ge,即给定材料类型。例如,50% 的 ROOF 为 SLATE,50% 的 ROOF 为 TILE,以此类推
我试图将这些结合在一起以引入报告、所有相关的建筑物和每座建筑物的所有施工数据,但我几乎是 JPA 和休眠注释的菜鸟。
所以,请帮助我确定将这些东西连接在一起的正确类和注释。或者甚至只是一个很好的例子的链接也会有所帮助。
@Entity
@Table(name="RCT_REPORT")
public class Report implements Serializable {
private Set<Building> buildings;
private long referenceNumber;
@Id
@Column(name="REF_NR")
public long getReferenceNumber() {
return this.referenceNumber;
}
public void setReferenceNumber(long referenceNumber) {
this.referenceNumber = referenceNumber;
}
@OneToMany(mappedBy="report", fetch=FetchType.EAGER)
public Set<Building> getBuildings() {
return this.buildings;
}
public void setBuildings(Set<Building> buildings) {
this.buildings = buildings;
}
}
@Entity
@Table(name="RCT_BUILDING")
public class Building implements Serializable {
private Report report;
private Set<ConstructionData> constructionData;
private BuildingPK id;
@EmbeddedId
public BuildingPK getId() {
return this.id;
}
public void setId(BuildingPK id) {
this.id = id;
}
@ManyToOne
@JoinColumn(name="REF_NR", insertable=false, updatable=false)
public Report getReport() {
return this.report;
}
public void setReport(Report report) {
this.report = report;
}
@OneToMany(mappedBy="building", fetch=FetchType.EAGER)
@JoinColumns ({
@JoinColumn(name="REF_NR", referencedColumnName = "REF_NR"),
@JoinColumn(name="BLG_NR", referencedColumnName = "BLG_NR")
})
public Set<ConstructionData> getConstructionData() {
return this.constructionData;
}
public void setConstructionData(Set<ConstructionData> constructionData) {
this.constructionData = constructionData;
}
}
@Embeddable
public class BuildingPK implements Serializable {
private long referenceNumber;
private int buildingNumber;
@Column(name="REF_NR")
public long getReferenceNumber() {
return this.referenceNumber;
}
public void setReferenceNumber(long referenceNumber) {
this.referenceNumber = referenceNumber;
}
@Column(name="BLG_NR")
public int getBuildingNumber() {
return this.buildingNumber;
}
public void setBuildingNumber(int buildingNumber) {
this.buildingNumber = buildingNumber;
}
public boolean equals(Object other) {
...
}
public int hashCode() {
...
}
}
@Entity
@Table(name="CNSTRCTN_DATA")
public class ConstructionData implements Serializable {
private ConstructionDataPK id;
private BigDecimal value;
private Building building;
@EmbeddedId
public ConstructionDataPK getId() {
return this.id;
}
public void setId(ConstructionDataPK id) {
this.id = id;
}
@Column(name="MTRL_SEL_VAL")
public BigDecimal getValue() {
return this.value;
}
public void setValue(BigDecimal value) {
this.value = value;
}
@ManyToOne
@JoinColumns ({
@JoinColumn(name="REF_NR", referencedColumnName="REF_NR", insertable=false, updatable=false),
@JoinColumn(name="BLG_NR", referencedColumnName="BLG_NR", insertable=false, updatable=false)
})
public Building getBuilding() {
return this.building;
}
public void setBuilding(Building building) {
this.Building = building;
}
}
@Embeddable
public class ConstructionDataPK implements Serializable {
private long referenceNumber;
private int buildingNumber;
private String structureTypeCode;
private String materialTypeCode;
@Column(name="REF_NR")
public long getReferenceNumber() {
return this.referenceNumber;
}
public void setReferenceNumber(long referenceNumber) {
this.referenceNumber = referenceNumber;
}
@Column(name="BLG_NR")
public int getbuildingNumber() {
return this.buildingNumber;
}
public void setbuildingNumber(int buildingNumber) {
this.buildingNumber = buildingNumber;
}
@Column(name="STRCT_TYP_CD")
public String getStructureTypeCode() {
return this.structureTypeCode;
}
public void setStructureTypeCode(String structureTypeCode) {
this.structureTypeCode = structureTypeCode;
}
@Column(name="MTRL_TYP_CD")
public String getMaterialTypeCode() {
return this.materialTypeCode;
}
public void setMaterialTypeCode(String materialTypeCode) {
this.materialTypeCode = materialTypeCode;
}
public boolean equals(Object other) {
...
}
public int hashCode() {
...
}
}
正如我所说,我对此很陌生,这一切对我来说都是正确的,但我确信我错过了一些东西。
谢谢!彼得