Java 与属性和单向映射的多对多关系
我对Hibernate还很陌生,搜索了一段时间后,我的注释仍然有问题 我有三门课:Java 与属性和单向映射的多对多关系,java,sql,hibernate,annotations,Java,Sql,Hibernate,Annotations,我对Hibernate还很陌生,搜索了一段时间后,我的注释仍然有问题 我有三门课: AuftragsPosition AuftragspositionZuordung(联接表) 材料 我想在AuftragsPosition和Material之间建立多对多关系,并在联接表上增加一个属性。 附加属性menge应该可以在AuftragsPosition中访问。 我的材料应该不知道其他两个表 以下是我的课程: AuftragsPosition @实体 @表(name=“AUFTRAGSPOSITION”
@实体
@表(name=“AUFTRAGSPOSITION”)
公共类AuftragsPosition扩展了AbstractVersionIdentity{
私人名单材料;
@OneToMany(mappedBy=“position”,targetEntity=AuftragspositionZuordnung.class,cascade=CascadeType.ALL)
公开名单{
返回物质;
}
}
AUFTRAGSPOSITIONZOURDNUNG
@实体
@表(name=“ZUORDNUNG_AUFTRAGSPOSITION”)
公共类AuftragspositionZuordnung扩展了AbstractVersionIdentity{
私人职位;
私人材料;
私有整数蒙格;
@许多酮
@JoinColumn(name=“AUFTRAGSPOSITION_ID”)
公共AuftragsPosition getPosition(){
返回位置;
}
@manytone(targetEntity=Material.class)
@JoinColumn(name=“MATERIAL\u ID”)
公共材料getMaterial(){
退料;
}
@列(name=“ANZAHL”)
公共整数getMenge(){
返回菜单;
}
}
你知道我应该如何注释这些类吗
谢谢和亲切的问候,
Kevin我会在
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
@CollectionTable(name=“MENGEN”,
joinColumns=@JoinColumn(name=“AUFTRAGSPOS_ID”))
@MapKeyJoinColumn(name=“MATERIAL”)
@列(name=“AMOUNT”)
私有映射数量=新HashMap();
您只需要@ElementCollection
注释。我已经包括了其他人来演示如何操作默认的表和列命名
我假设您希望按
材质
,而不是按数量设置关键帧-这将更改所需的注释。您可以创建一个联接类(AuftragsPositionMaterial
),该类可以包含额外的属性menge
)
@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;
}
}
现在,主键是:
@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;
}
}
检查此帮助是否允许您指定哪些类之间应该有多对多关系,以及您希望关系属性在哪个类中可用?@Lakshmi-恐怕链接已过时。你可以用地图为关系属性建模。@Lakshmi-我看到了你的链接,但对我没有帮助。@kostja-我已经用你要求的信息编辑了我的帖子。谢谢你的回答,它帮了我很大的忙!
@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;
}
}