簡體   English   中英

如何使用 Spring Boot 的 JPA 存儲庫中的映射從 spring 引導中的多個表中獲取數據

[英]How to fetch data from multiple tables in spring boot using mapping in Spring Boot's JPA repository

我創建了四個實體類:

@Entity
@Table(name = "DashboardRegionCountry")
public class DashboardRegionCountry implements Serializable {

    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(name = "dashboardId")
    private long dashboardId;

    @OneToOne(targetEntity = Country.class)
    @JoinColumn(name="countryId")
    private Country country;
    
    @OneToOne(targetEntity = Region.class)
    @JoinColumn(name="regionId")
    private Region region;

    @ManyToOne()
    @JoinColumn(name="dashboardId")
    private Dashboard dashboard;
}

@Entity
@Table(name = "Dashboard")
public class Dashboard implements Serializable {

    @Id
    @Column(name = "dashboardId")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long dashboardId;

    @Column(name = "dashboardName")
    private long dashboardName;

    @OneToMany(mappedBy= dashboard)
    private List<DashboardRegionCountry> dashboardRegionCountry;
    
}

@Entity
@Table(name = "Country")
public class Country implements Serializable {

    @Id
    @Column(name = "countryId")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long countryId;

    @Column(name = "shortName")
    private String shortName;
    
    @Column(name = "longName")
    private String longName;
 
}

@Entity
@Table(name = "Region")
public class Region implements Serializable {

    @Id
    @Column(name = "regionId")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long regionId;

    @Column(name = "shortName")
    private String shortName;
    
    @Column(name = "longName")
    private String longName;
}

各個實體的表模式如下:

儀表板地區國家:

+----------------+---------------+
| Field          | Type          |
+----------------+---------------+
| id(PK)         | Number(11)    |
| dashboardId(FK)| Number(11)   |
| countryId      | Number(11)    |
| regionId       | Number(11)   |
+-------------+------------------+

Dashboard:

+----------------+---------------+
| Field          | Type          |
+----------------+---------------+
| dashboardId(PK)| Number(11)    |
| dashboardName  | varchar(11)   |
+-------------+------------------+

Country:
+-------------+---------------+
| Field       | Type          |
+-------------+---------------+
| countryId(PK)| Number(11)   |
| shortName   | Varchar2(10)  |
| longName    | Varchar2(10)  |
+-------------+---------------+

Region:
+-------------+---------------+
| Field       | Type          |
+-------------+---------------+
| regionId(PK)| Number(11)    |
| shortName   | Varchar2(10   |
| longName    | Varchar2(10)  |
+-------------+---------------+

基本上,當用戶輸入dashboardId 時,我們想要獲取dashboardDetails 以及該地區和該地區的各個國家。 如上所述,我的表中只有地區和國家 ID,它們的名稱出現在其他表中。 我想顯示我的示例 output 類似:

{
 "dashboardId":20,
  "DashboardRegionCountry": [{
    "Region":"ASIA",
    "dashboardId":["India","China"]
  },
  {
    "Region":"NAM",
    "dashboardId":["USA","Canada"]
  }
  ]
}

我正在嘗試編寫 JPA 存儲庫,但想知道是否可以編寫如下內容:

@Repository
public interface DashboardRegionCountryRepository extends JpaRepository<DashboardRegionCountry, Long>{

    List<Map<Long,Country>> findRegionBy_RegionId(Long dashboardId);
}

我正在嘗試在一個查詢中獲取所有數據,任何建議都會非常有幫助

只需使用getById獲取相應的DashboardRegionCountry (查看參考文檔),它將包含相關的CountryRegion 如果您不想在您的實體中公開所有CountryRegion信息,我建議您將它們 map 提供給 DTO,該 DTO 將是您想要在控制器上返回某些內容時使用的 model。

findByRegion_regionId 試試這個,這會起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM