java 如何在Sping Boot 中通过外键列出其他表中的列

umuewwlo  于 2023-02-02  发布在  Java
关注(0)|答案(1)|浏览(121)

我正在努力解决这个问题。我有一个表“Cities”,它有一个指向表“Countries”的外键,表中的country_id引用了城市所在的国家。在我的Web应用程序中,我可以列出“Cities”表中的所有数据,但我找不到列出国家名称的方法。这是我的服务类方法。

public List<City> listAll() {
    List<City> cities = repo.findAll();
    return cities;
}

在“城市”实体中,我有一个字段“国家”,通过它我可以在方法名称中找到国家,但我不知道如何将它与城市一起返回。
增加:

@GetMapping("/cities")
public String getAllCities(Model model) {
    List<City> listCities = service.listAll();

    model.addAttribute("showListCities", listCities);
    return "cities";
}

City.java:

package com.bookflight.BookFlight.gradovi;

import com.bookflight.BookFlight.drzave.Drzave;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "cities")
public class City {
    @Id
    @Column(name = "city_id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    @Column(nullable = false, length = 45, name = "city_name")
    private String city_name;
    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "cou_id", referencedColumnName = "cou_id")
    private Country countries;

public Integer getId() {
    return id;
}

public void setId(Integer id) {
    this.id = id;
}

public String getcity_name() {
    return city_name;
}

public void setcity_name(String city_name) {
    this.city_name = city_name;
}

public Countries getCountries() {
    return countries;
}

public void setCountries(Country countries) {
    this.countries = countries;
}

}

**注意:**这里的每个变量名都是我的母语,所以我逐字翻译,以便以后更好地理解您的解决方案。

shyt4zoc

shyt4zoc1#

您已经将FetchType添加到@ManyToOne注解参数中:

@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "cou_id", referencedColumnName = "cou_id")
private Country countries;

并为每种获取类型提供简短说明:

FetchType.LAZY将仅对主表触发。如果在代码中调用具有父表依赖项的任何其他方法,则它将触发查询以获取该表信息。
FetchType.EAGER将直接创建所有表(包括相关父表)的联接。

您可以在city类中添加一个方法来返回您的国家名称,该方法将在视图层中可用:

public String getCountryName(){
    return countries == null ? null : countries.getName();
    //not sure how the country class is implemented
  }

相关问题