![](/img/trans.png)
[英]Entity mapping for one to many with multiple foreign keys as composite primary key
[英]Hibernate one to one mapping on composite foreign key and primary key in single table
我有一个Catagory表,具有复合主键和外键。 我的表结构就像
CREATE TABLE CATAGORY (
CATAGORY_ID int(11) NOT NULL,
CATAGORY_NAME varchar(50) DEFAULT NULL,
VERSION int(11) NOT NULL,
PARENT_ID int(11) DEFAULT NULL,
PRIMARY KEY (CATAGORY_ID,VERSION)
);
ALTER TABLE CATAGORY ADD CONSTRAINT FOREIGN KEY (PARENT_ID, VERSION) REFERENCES CATAGORY (CATAGORY_ID, VERSION);
我想要像这样的Catagory类的ORM映射
public class Catagory {
@EmbeddedId
private CatagoryPk pk ;
@Column(name="CATAGORY_NAME")
private String catagoryName;
private Catagory parentId;
private List<Catagory> childs ;
}
@Embeddable
public class CatagoryPk {
@Column(name="VERSION")
private Integer version;
@Column(name="CATEGORY_ID")
private Integer catagoryId;
}
现在如何注释
private Catagory parentId;
private List<Catagory> childs ;
@JoinColumns({
@JoinColumn(name="VERSION", referencedColumnName="VERSION"),
@JoinColumn(name="PARENT_ID", referencedColumnName="CATAGORY_ID")
})
@ManyToOne
private Catagory parentId;
@OneToMany(mappedBy="parentId")
private List<Catagory> childs;
或使用@IdClass
而不是@EmbeddableId
版本(已通过Eclipselink 2.2.1测试):
public class CatagoryPk implements Serializable {
private Integer version;
private Integer catagoryId;
public CatagoryPk() {
}
public CatagoryPk(Integer version, Integer catagoryId) {
this.version = version;
this.catagoryId = catagoryId;
}
}
@Entity
@IdClass(CatagoryPk.class)
public class Catagory {
@Column(name="VERSION")
@Id private Integer version;
@Column(name="CATAGORY_ID")
@Id private Integer catagoryId;
@ManyToOne
@JoinColumns({
@JoinColumn(name="VERSION", referencedColumnName="VERSION", insertable=false, updatable=false),
@JoinColumn(name="PARENT_ID", referencedColumnName="CATAGORY_ID")
})
private Catagory parentId;
}
看一下本指南 。 您必须使用@ManyToOne和@OneToMany批注。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.