Hibernate 许多人和许多人

Hibernate 许多人和许多人,hibernate,one-to-many,many-to-one,mappedby,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

我使用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
选项?因此,我们将有两个表:
country
city
city
表将有country\u id列

2) 在
Country
类中添加
Country-Country
字段,并在其上方添加
@OneToMany(mappedBy='Country')
,在
City
类中添加
City-City
字段,并在其上方添加
@ManyToOne
选项?在这种情况下,将有三个表:
country
city
和组合表
country\u city

1) 在City类中添加City字段,并添加@ManyTone和 @在它上面是什么?因此,我们将有两个表: 国家和城市,城市表将有国家/地区id列

我想您的意思是在城市类中添加Country Country字段,如果您的目标是单向关系,那么这是正确的,但是joinColumn不应该位于拥有的实体中,它应该在非所有者实体中,因此您必须转到Country类,在那里添加城市列表,并使用@OneToMany with join列对其进行注释

2) 在Country类和中添加Country字段 @上面是OneToMany(mappedBy='country'),并在城市中添加城市字段 类并在其上方添加@ManyToOne anotation?在这种情况下,会有 可以是三个表:国家、城市和组合表国家/城市


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

没有“最佳”方法。这完全取决于你想要什么和需要什么。不过,您描述的两种方式是不正确的,您对双向关联映射方式的理解也是错误的。阅读hibernate手册。谢谢,我正在做