Spring Boot、Hibernate、JPA 中关系@ManyToOne 的问题

Problem with relation @ManyToOne in Spring Boot, Hibernate, JPA

我有 classes -> 国家和城市。

  1. 我想创建作品请求,当我调用获取所有国家时,我将获取所有国家和城市。
  2. 当我调用获取所有城市时,我将从国家模型中获取所有只有国家/地区的城市。
  3. 我想添加与国家相关的新城市。

我的国家模型class:

  @GeneratedValue(strategy = GenerationType.IDENTITY)
@Id
private Long id;

@NotEmpty(message = "Name of country is mandatory.")
@Column(unique = true)
private String nameOfCountry;

@NotBlank(message = "Name of capital is mandatory.")
private String capital;

@Max(value = 17098242L, message = "Maximum value for population = 10000000000")
private Long surface;

private String countryCode;

private String telephoneCode;

@OneToMany(cascade = CascadeType.PERSIST)
@JoinColumn(name = "country_Id", updatable = false, insertable = false)
private List<CityModelDao> cityModelDao;

我的城市模型class:

    @GeneratedValue(strategy = GenerationType.IDENTITY)
@Id
private Long id;

@NotEmpty(message = "Name of country is mandatory.")
@NotNull
@Column(nullable = false, unique = true)
private String nameOfCity;

我知道我这里没有@ManyToOne,但我还是做错了,现在我没有更多的想法。

我对 get countries 的回复:

这就是我想要的。

但是当我打电话询问城市时,我的回答是:

很遗憾,我没有获得有关国家/地区的信息。

在数据库中,我在城市中有来自国家/地区的有关 fk 的信息:

能帮我做作品关系吗?我试过类似的东西:

城市模型:

    @ManyToOne()
@JoinColumn(name = "country_Id")
private CountryModelDao countryId;

国家模型:

    @OneToMany(mappedBy = "countryId", orphanRemoval = true, cascade = CascadeType.PERSIST)
private List<CityModelDao> cityModelDao;

但是错了。当我尝试使用上述关系城市时,出现错误。

你能告诉我在这种情况下如何正确执行@ManyToOne 吗?我做错了什么?

谢谢

最简单的双向OneToMany关系模型应该是:

@OneToMany(mappedBy = "countryId")
private List<CityModelDao> cityModelDao;

您将 Country 设置为关系 Country - City 的所有者; 您期望 CityModelDao 中有一个属性 'countryId';

@ManyToOne
@JoinColumn(name = "country_id")
private CountryModelDao countryId;

您将根据将在 CityModelDao table.

列 country_id 上执行的连接操作填充数据

当然,之后你可以通过孤儿去除,级联类型等丰富注释

LE: 您正在通过 REST 使用它,您需要避免无限循环。

请将关系更新为:

@JsonManagedReference
@OneToMany(mappedBy = "countryId")
private List<CityModelDao> cityModelDao;
@JsonBackReference
@ManyToOne
@JoinColumn(name = "country_id")
private CountryModelDao countryId;