多对一和一对多

ManyToOne and OneToMany

我使用 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 class 中添加City city 字段并在上面添加@ManyToOne@JoinColumn 注释?因此,我们将有两个 table:countrycitycity table 将有 country_id 列。

2) 在Countryclass和@OneToMany(mappedBy='country')上面添加Country country字段,在City[=36]添加City city字段=] 并在上面添加 @ManyToOne 注释?在这种情况下,将有三个 table:countrycity 并组合 table country_city

1) add City city field in City class and add @ManyToOne and @JoinColumn anotations above it? As a result we will have two tables: country and city, city table will have country_id column.

我想你的意思是在 City class 中添加 Country 国家字段,是的,如果你的目标是单向关系,这是正确的,但 joinColumn 不应该在拥有实体中,它应该是在 none 拥有实体中,因此您必须前往国家 class 并在那里添加一个城市列表,并使用带有连接列的 @OneToMany 对其进行注释。

2) add Country country field in Country class and @OneToMany(mappedBy='country')above it and add City city field in City class and add @ManyToOne anotations above it? In this case there will be three tables: country, city and combining table country_city

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