[英]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.