我试图理解hibernate中两个实体之间的OneToOne映射,还有一个条件,即主键(所以是外键)必须是复合的。
UserID可嵌入类型:
@Embeddable
public class UserID implements Serializable {
private static final long serialVersionUID = 1L;
private int ssnID;
private int uniqueNum;
// getters and setters..
}
VehicleID可嵌入类型:
@Embeddable
public class VehicleID implements Serializable {
private int vehicleID;
private int regNum;
// getters and setters
}
具有组合主键VehicleID的车辆实体:
@Entity
public class Vehicle {
@EmbeddedId
private VehicleID vehicleID;
private String description;
// getters and setters..
}
UserInfo实体具有复合原始密钥UserID,并且拥有UserInfo与车辆之间的OneToOne关系的侧实体:
@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的SQL输出:
Hibernate:如果存在,则删除表UserInfo Hibernate:如果存在丢弃表车辆 Hibernate:创建表UserInfo (ssnID整数不为空,uniqueNum整数不为空,full_name varchar(255),XYZ_ID整数,ABC_Num整数,主键(ssnID,uniqueNum)) Hibernate:创建表载体(regNum整数null,vehicleID整数null,description (255),主键(regNum,vehicleID)) Hibernate: alter添加约束FKlbuhulsmr2lghirdvem61b9lb外键(XYZ_ID,ABC_Num)引用车辆
简而言之,UserInfo
是拥有方实体,与Vehicle
实体(以复合VehicleID作为主键)具有OneToOne
关系。
我对此表示怀疑:
在UserInfo
实体中,我们指定了OneToOne
关系(以及注释):
@OneToOne(cascade=CascadeType.ALL)
@JoinColumns({@JoinColumn(name="XYZ_ID") , @JoinColumn(name="ABC_Num")})
Vehicle veh;
如上文所示,在UserInfo
表中,Vehicle
表上有一个复合外键,JoinColumn
的名称指定为XYZ_ID
和ABC_Num
。
我怀疑XYZ_ID
和ABC_Num
在Vehicle
表中对应哪些字段?
有人能帮我理解这个吗?
发布于 2017-12-27 14:02:56
到主密钥(ssnID,uniqueNum)
https://stackoverflow.com/questions/47982668
复制相似问题