且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

休眠单表中复合外键和主键的一对一映射

更新时间:2022-06-04 08:43:09

@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 测试):

or version with @IdClass instead of @EmbeddableId (tested with 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;
}