繁体   English   中英

在单个表中的组合外键和主键上休眠一对一映射

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM