Java 为什么@JoinColumn在父端,而生成列在子端?
嗨,我对这里的实体关系感到困惑:Java 为什么@JoinColumn在父端,而生成列在子端?,java,hibernate,Java,Hibernate,嗨,我对这里的实体关系感到困惑: class Country{ @Id @Column(name="conId") private int id; @Column(name="name") private String name; @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY) @JoinColumn(name=
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;
}
当您持久化这些实体时。它生成这个表
国家:
圆锥形
名字
声明:
-州
-名字
-乡下人
我的困惑是
Country是父实体,State是子实体,其中有一个countryId链接到父实体的ID
这个
根据我有限的理解,应该输出:
国家:
-圆锥形
-名字
-州
相反,它构造了一个包含以下内容的表:
国家:
圆锥形
名字
所以这个stateId丢失了。它会在状态表中创建conId,即:
声明:
-州
-名字
乡下人
为什么这个Contry表不包含stateId?相反,它在状态表中创建countryId?这是因为从实体生成的模式满足第一种数据库标准形式:所有列都必须包含原子值 因此,不再使用包含国家中每个国家的所有ID的状态列,而是将信息移动到一对多关系的多方面
class State{
@Id
@Column(name = "stateId")
private int id;
@Column(name = "name")
private String name;
@Column(name="countyId")
private int countryId;
}
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;
}