ManyToOne和OneToMany

时间:2017-06-05 05:51:18

标签: hibernate one-to-many many-to-one mappedby

我使用Hibernate并且我有实体:

@Data
@Entity
public class Country {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private long id;

    @Column(name = "country_nm")
    private String countryName;
}

@Data
@Entity
public class City {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private long id;

    @Column(name = "city_nm")
    private String cityName;
}

国家可以有很多城市,城市只有一个国家。 关联这些实体的最佳方式是什么?

1)在City city课程中添加City字段,并在其上方添加@ManyToOne@JoinColumn个字词?因此,我们将有两个表:countrycitycity表将包含country_id列。

2)在Country country课程中添加Country字段,在其上方添加@OneToMany(mappedBy='country'),在City city课程中添加City字段,然后添加@ManyToOne个字词它上面?在这种情况下,将有三个表:countrycity和合并表country_city

1 个答案:

答案 0 :(得分:1)

  

1)在City类中添加City city字段并添加@ManyToOne和   @JoinColumn上面的anotations呢?因此,我们将有两个表:   国家和城市,城市表将有country_id列。

我想你的意思是在City类中添加Country country字段,如果你的目标是单向关系,那么这是正确的,但是joinColumn不应该在拥有的实体中,它应该在没有拥有的实体中所以你必须去Country类并在那里添加一个城市列表,然后用@OneToMany用连接列注释它们。

  

2)在Country类中添加Country country字段   在它上面的@OneToMany(mappedBy =' country')并在City中添加City city字段   在上面添加@ManyToOne anotations吗?在这种情况下会有   是三个表:国家,城市和组合表country_city

这个解决方案有很多错误,首先你不能拥有" @oneToMany(mappedBy =' country)"像这样,只有当你应用了第一个解决方案并且想要使关系成双向时才能使用它,即使这不会生成第三个类,如果你想生成第三个类,你需要@JoinTable class而不是@JoinColumn