簡體   English   中英

Spring JPA-OneToOne不從輔助表中選擇數據-MySQL

[英]Spring jpa - oneToOne not selecting data from secondary table - mySql

Spring數據的新手,有一個我無法解決的問題。 有一個mySql數據庫,並嘗試使用OneToOne通過外鍵從表中獲取數據。

Table 1 - location
   id      int(11) pk nn UQ
   zipcode varchar(11) NN UQ
   city    varchar(45) NN
   lat     Double      NN
   lon     Double      NN

Table 2 - weather
   id           INT(11)  PK NN
   location_id  INT(11)  NN
   desc         varchar(45)  NN
Foreign Key name fk_location_id  referenced table location column location_id referenced column id - pointed to location column id.`

WeatherData.java列定義@OneToOne (fetch = FetchType.LAZY) @JoinColumn(name="fk_location_id") private LocationData location;

執行查詢的代碼: for (WeatherData weather : repository.findAll()) { log.info(weather.toString()); } for (WeatherData weather : repository.findAll()) { log.info(weather.toString()); }

在上面的代碼中的log.info行中設置一個斷點,並查看返回的氣象記錄。 位置值為空。 嘗試將OneToOne列名設置為id失敗。

我究竟做錯了什么?

我會嘗試以下3件事:

  1. 將@JoinColumn中的值設置為FK列的名稱。
  2. 確保您的FK實體類(LocationData)具有格式正確的@OneToOne批注。 mapledBy值是WeatherData中具有@OneToOne和@JoinColumn批注的字段的名稱。
  3. 確保將您的實體類注釋為實體(通過@Entity)。

使用此站點的示例 ,您的天氣表將是book表,而位置將是book_detail表。 就是說,有一些注釋可以確保您正在使用。 首先,請確保您的實體類已被標記。 即:

 @Entity
 @Table(name = "weather")
 public class WeatherData {

如果您的實體類和表具有相同的名稱,則可以省略@Table批注; 但是,我總是喜歡添加它,因為我認為這是一種很好的做法。 確保注釋所有實體類,而不僅是WeatherData。 現在,關於location_id,您的@JoinColumn應該引用表中的列。

@OneToOne (fetch = FetchType.LAZY)
@JoinColumn(name="location_id")
private LocationData location;

然后,在LocationData類中,還需要使用@OneToOne注釋locationId字段。

@OneToOne(mappedBy = "location")
private WeatherData weather;

查看鏈接文章以了解更多信息。 我希望這有幫助。

通過以下更改解決了該問題:

@OneToOne (fetch = FetchType.EAGER) @JoinColumn(name="location_id") private LocationData location;

並修復了在locationdata類中應該為字符串的錯誤數據類型定義為int的問題。 在locationdata toString方法中將double設置為int時也遇到了問題。

暫無
暫無

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

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