【发布时间】:2014-03-18 03:02:25
【问题描述】:
考虑与Employee 和Address 的关系。 Employee 和 Address 之间存在一对一的映射关系。以下是型号:
@Entity
@Table(name = "Address")
public class Address
{
@Id
@GeneratedValue
@Column(name = "addressId")
private int addressId;
@Column(name = "city")
private String city;
.
.
}
@Entity
@Table(name = "Employee")
public class Employee
{
@Id
@Column(name = "employeeId")
private int employeeId;
@Column(name = "name")
private String name;
@OneToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "addressId")
@Fetch(FetchMode.JOIN)
private Address address;
.
.
}
现在,当我执行以下 HQL 查询时,它会在内部生成两个查询。一个用于获取员工,另一个用于获取地址。
"FROM Employee WHERE id = " + 1
Hibernate 生成的 SQL 查询
Hibernate: select employee0_.employeeId as employeeId0_, employee0_.addressId as addressId0_, employee0_.name as name0_ from Employee employee0_ where employee0_.employeeId=1
Hibernate: select address0_.addressId as addressId1_0_, address0_.city as city1_0_ from Address address0_ where address0_.addressId=?
当我使用 @Fetch(FetchMode.JOIN) 时,我希望 Hibernate 只执行 1 个查询,并通过连接一次性获取 Employee 和 Address 数据。
知道为什么它会执行两个查询吗?如何让 Hibernate 使用 join 只执行一个查询?
我使用的是 Hibernate 3.3.0。
【问题讨论】:
标签: hibernate query-optimization fetch one-to-one