[英]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件事:
使用此站點的示例 ,您的天氣表將是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.