Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么@JoinColumn在父端,而生成列在子端?_Java_Hibernate - Fatal编程技术网

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;
    }