嗨,我对这里的实体关系感到困惑:
class Country{
@Id
@Column(name="conId")
private int id;
@Column(name="name")
private String name;
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY) @JoinColumn(name="countryId")
private Set<a_1_State_lazy> states;
}
和
class State{
@Id
@Column(name = "stateId")
private int id;
@Column(name = "name")
private String name;
@Column(name="countyId")
private int countryId;
}
当您坚持使用这些实体时。它产生这张表
Country
:
conId
名称
State
:
-stateId
-名称
-countryId
我在这里的困惑是
Country
是父实体,State
是子实体(其中有一个countryId链接到父实体的ID)。
此
class Country{
@Id
@Column(name="id")
private int id;
@Column(name="name")
private String name;
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
@JoinColumn(name="countryId")
private Set<a_1_State_lazy> states;
}
(根据我的有限理解)应该输出:
Country
:
-conId
- 名称
-stateId
相反,它构造了一个包含以下内容的表:
Country
:
conId
名称
因此缺少此“ stateId”。并在State
表中创建“ conId”,即:
State
:
-stateId
-名称
该Contry
表为什么不包含“ stateId”?而是在State
表中创建“ countryId”?
答案 0 :(得分:1)
这是由于从您的实体生成的架构满足数据库的第一种普通形式的事实:所有列都必须包含原子值(First normal form (1NF))。
因此,该信息已被移至“一对多”关系的“许多”侧,而不是包含该国家/地区中每个州的所有ID的states
列。