【发布时间】:2016-04-11 13:37:28
【问题描述】:
学习休眠。 我有以下类用户,地区,国家如下
public class User {
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
@Column(name = "first_name")
Private String firstName;
@Column(name = "last_name")
private String lastName;
@OneToOne(fetch = FetchType.EAGER)
@JoinTable(name = "user_country_region", joinColumns ={@JoinColumn(name = "user_id") }, inverseJoinColumns = { @JoinColumn(name = "country_id") })
private Country userCountry;
@OneToOne(fetch = FetchType.EAGER)
@JoinTable(name = "user_country_region", joinColumns = {@JoinColumn(name = "user_id") }, inverseJoinColumns = { @JoinColumn(name = "region_id") })
private Region userRegion;
//With its respective Getters and Setters
}
public class Country {
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
@Column(name = "name")
private String name;
//With its respective Getters and Setters
}
public class Region {
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
@Column(name = "name")
private String name;
//With its respective Getters and Setters
}
我面临的问题是休眠查询只返回地区而不是国家。这可能是什么原因造成的?
尝试获取国家和地区值如下
System.out.println("Country: "+user.getCountry().getName());
System.out.println("Region: "+user.getRegion().getName());
来自 Hibernate Show sql 的响应。似乎缺少国家/地区详细信息。
Hibernate:
select
this_.id as id1_3_3_,
this_.first_name as first_na2_3_3_,
this_.last_name as last_na3_3_3_,
region2_.id as id1_8_2_,
region2_.name as name2_8_2_
from
user this_
left outer join
user_country_region this_1_
on this_.id=this_1_.user_id
left outer join
region region2_
on this_1_.region_id=region2_.id
where
this_.id=?
【问题讨论】:
-
您能否确认一下您的表格名称。用户国家地区,用户国家地区?两者都正确吗?只是从基础开始?
-
是的,它们是一样的。表中的字段如下user_id、country_id、region_id。该表连接了三者。
-
刚刚更新了我如何尝试初始化用户国家和地区的问题
-
不是初始化代码。 Hibernate 使用
User获取所有数据,原因是fetch = FetchType.EAGER。请启用 SQL 日志记录并将日志添加到您的问题中,以查看 Hibernate 如何获取数据。 -
我已更新问题并附上休眠 SQL 响应。
标签: java spring hibernate model-view-controller