0

我使用 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字段并在其上方添加和注释?结果,我们将有两个表:并且,表将具有 country_id 列。City@ManyToOne@JoinColumncountrycitycity

2)Country countryCountry类及其@OneToMany(mappedBy='country')上方添加City city字段并在City类中添加字段并在其上方添加@ManyToOne注释?在这种情况下,将有三个表:countrycity组合表country_city

4

1 回答 1

1

1)在City类中添加City城市字段并在其上方添加@ManyToOne和@JoinColumn注解?结果,我们将有两个表:国家和城市,城市表将有 country_id 列。

我想你的意思是在 City 类中添加 Country country 字段,是的,如果你的目标是单向关系,这将是正确的,但 joinColumn 不应该在拥有实体中,它应该在无拥有实体中,所以你会有转到 Country 类并在那里添加城市列表,并使用带有连接列的 @OneToMany 注释它们。

2)在 Country 类中添加 Country 国家字段并在其上方添加 @OneToMany(mappedBy='country') 并在 City 类中添加 City 城市字段并在其上方添加 @ManyToOne 注释?在这种情况下,将有三个表:国家、城市和组合表 country_city

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

于 2017-06-05T06:02:46.207 回答