我试图理解hibernate中两个实体之间的OneToOne映射,还有一个条件,即主键(以及外键)必须是复合的。
@Embeddable
public class UserID implements Serializable {
private static final long serialVersionUID = 1L;
private int ssnID;
private int uniqueNum;
// getters and setters..
}
@Embeddable
public class VehicleID implements Serializable {
private int vehicleID;
private int regNum;
// getters and setters
}
@Entity
public class Vehicle {
@EmbeddedId
private VehicleID vehicleID;
private String description;
// getters and setters..
}
@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
}
Hibernate:drop table UserInfo if exists
Hibernate:drop table Vehicle if exists
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
关系。
在UserInfo
实体中,我们指定OneToOne
关系(和注释):
@OneToOne(cascade=CascadeType.ALL)
@JoinColumns({@JoinColumn(name="XYZ_ID") , @JoinColumn(name="ABC_Num")})
Vehicle veh;
从上面可以看出,在UserInfo
表中,我们在Vehicle
表上有一个复合外键,JoinColumn
的名称指定为XYZ_ID
和{ {1}}。
我怀疑ABC_Num
和XYZ_ID
对应ABC_Num
表中哪些字段?
任何人都可以帮我理解这个吗?
答案 0 :(得分:1)
到Vehical主键(ssnID,uniqueNum)