[英]Many-To-Many relationship with Attributes and unidirectional mapping
我是Hibernate的新手,經過一段時間的搜索,我的注釋仍然存在問題。
我有3節課:
我想要AuftragsPosition和Material之間具有多對多關系,並在聯接表上具有附加屬性。 附加屬性菜單應可在AuftragsPosition中訪問。 我的資料應該不了解其他兩個表。
這是我的課程:
@Entity
@Table(name = "AUFTRAGSPOSITION")
public class AuftragsPosition extends AbstractVersionedEntity<Long> {
private List<Material> materialien;
@OneToMany(mappedBy = "position", targetEntity = AuftragspositionZuordnung.class, cascade = CascadeType.ALL)
public List<Material> getMaterialien() {
return materialien;
}
}
@Entity
@Table(name = "ZUORDNUNG_AUFTRAGSPOSITION")
public class AuftragspositionZuordnung extends AbstractVersionedEntity<Long> {
private AuftragsPosition position;
private Material material;
private Integer menge;
@ManyToOne
@JoinColumn(name = "AUFTRAGSPOSITION_ID")
public AuftragsPosition getPosition() {
return position;
}
@ManyToOne(targetEntity = Material.class)
@JoinColumn(name = "MATERIAL_ID")
public Material getMaterial() {
return material;
}
@Column(name = "ANZAHL")
public Integer getMenge() {
return menge;
}
}
您知道如何注釋這些課程嗎?
謝謝你,凱文
我會將地圖添加到AuftragsPosition
類中,看起來像這樣:
@ElementCollection
@CollectionTable(name = "MENGEN",
joinColumns = @JoinColumn(name = "AUFTRAGSPOS_ID"))
@MapKeyJoinColumn(name = "MATERIAL")
@Column(name = "AMOUNT")
private Map<Material, Integer> amounts = new HashMap<Material, Integer>();
您只需要@ElementCollection
批注。 我已經包括了其他內容,以演示如何操作默認的表和列命名。
我假設您要按Material
而不是按數量進行鍵輸入-這將更改所需的注釋。
您可以創建一個可以包含額外屬性menge
類( AuftragsPositionMaterial
)。
@Entity
@Table(name = "AUFTRAGSPOSITION")
public class AuftragsPosition extends AbstractVersionedEntity<Long> {
private Set<AuftragsPositionMaterial> auftragsPositionMaterials = new HashSet<AuftragsPositionMaterial>();
@OneToMany(fetch = FetchType.LAZY, mappedBy = "pk.auftragsposition", cascade=CascadeType.ALL)
public Set<AuftragsPositionMaterial> getAuftragsPositionMaterials() {
return auftragsPositionMaterials;
}
}
聯接類:
@Entity
@Table(name = "AuftragsPosition_Material")
@AssociationOverrides({
@AssociationOverride(name = "pk.auftragsPosition",
joinColumns = @JoinColumn(name = "AUFTRAGSPOSITION_ID")),
@AssociationOverride(name = "pk.material",
joinColumns = @JoinColumn(name = "MATERIAL_ID")) })
public class AuftragsPositionMaterial {
private AuftragsPositionMaterialID pk = new AuftragsPositionMaterialID();
@Column(name = "MENGE")
private String menge;
@EmbeddedId
public AuftragsPositionMaterialID getPk() {
return pk;
}
}
現在,主鍵:
@Embeddable
public class AuftragsPositionMaterialID implements java.io.Serializable {
private AuftragsPosition auftragsPosition;
private Material material;
@ManyToOne
public Stock getAuftragsPosition() {
return auftragsPosition;
}
public void setAuftragsPosition(AuftragsPosition auftragsPosition) {
this.auftragsPosition= auftragsPosition;
}
@ManyToOne
public Material getMaterial() {
return material;
}
public void setMaterial(Material material) {
this.material= material;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.