Hibernate:复合主键 - 外键:如何在两个表之间映射单个字段

问题描述 投票:1回答:1

我试图了解hibernate中两个实体之间的OneToOne映射,还有一个条件,即主键(以及外键)必须是复合的。

UserID embeddable type:

@Embeddable
public class UserID  implements Serializable {

    private static final long serialVersionUID = 1L;
    private int ssnID;
    private int uniqueNum;
    // getters and setters..
}

VehicleID embeddable type:

@Embeddable
public class VehicleID implements Serializable {
    private int vehicleID;
    private int regNum;
    // getters and setters
}

Vehicle Entity having composite primary key VehicleID:

@Entity
public class Vehicle {

    @EmbeddedId
    private VehicleID vehicleID;
    private String description;
    // getters and setters..
}

UserInfo Entity having composite priamary key UserID and is owning-side entity for OneToOne relationship between UserInfo and Vehicle:

@Entity
public class UserInfo {
    private String full_name;
    @EmbeddedId
    UserID userID;

    @OneToOne(cascade=CascadeType.ALL)
    @JoinColumns({@JoinColumn(name="XYZ_ID") , @JoinColumn(name="ABC_Num")})
    Vehicle veh;

    // getters, setters and other code
}

When I run this program, the below is the SQL output from Hibernate:

Hibernate:drop table UserInfo如果存在

Hibernate:drop table如果存在则

Hibernate:create table UserInfo(ssnID integer not null,uniqueNum integer not null,full_name varchar(255),XYZ_ID integer,ABC_Num integer,primary key(ssnID,uniqueNum))

Hibernate:create table Vehicle(regNum integer not null,vehicleID integer not null,description varchar(255),primary key(regNum,vehicleID))

Hibernate:alter table UserInfo添加约束FKlbuhulsmr2lghirdvem61b9lb外键(XYZ_ID,ABC_Num)引用Vehicle

简而言之,UserInfo是拥有方实体,并且与OneToOne实体(其具有复合VehicleID作为主键)具有Vehicle关系。

My doubt is here:

UserInfo实体中,我们指定OneToOne关系(和注释):

@OneToOne(cascade=CascadeType.ALL)
@JoinColumns({@JoinColumn(name="XYZ_ID") , @JoinColumn(name="ABC_Num")})
Vehicle veh;

从上面可以看出,在UserInfo表中,我们在Vehicle表上有一个复合外键,JoinColumn的名称指定为XYZ_IDABC_Num

我怀疑XYZ_IDABC_NumVehicle表中对应哪些字段?

任何人都可以帮我理解这个吗?

hibernate jpa one-to-one composite-primary-key
1个回答
1
投票

到Vehicle主键(anD,唯一名称)

© www.soinside.com 2019 - 2024. All rights reserved.