Hibernate在单个表中对复合外键和主键进行一对一映射

我有一个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 childs ; } @Embeddable public class CatagoryPk { @Column(name="VERSION") private Integer version; @Column(name="CATEGORY_ID") private Integer catagoryId; } 

现在如何注释

 private Catagory parentId; private List childs ; 

 @JoinColumns({ @JoinColumn(name="VERSION", referencedColumnName="VERSION"), @JoinColumn(name="PARENT_ID", referencedColumnName="CATAGORY_ID") }) @ManyToOne private Catagory parentId; @OneToMany(mappedBy="parentId") private List 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注释。