1
Hibernate newb試圖理解LAZY和EAGER抓取之間的區別。Hibernate - FetchType.LAZY熱切加載數據
地址模式:
系車型:
@Entity
public class Department {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column
private String name;
@OneToOne(mappedBy = "department", fetch = FetchType.LAZY)
private Address address;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
@Override
public String toString() {
return "Department [id=" + id + ", name=" + name + "]";
}
}
測試方法:
@Test
public void testDepartment() {
Long departmentID;
Department department;
Long addressId;
Address address;
try (Session session = SessionUtil.getSession()) {
Transaction tx = session.beginTransaction();
department = new Department();
department.setId(69L);
department.setName("company");
address = new Address();
address.setCity("city");
address.setStreet("street");
address.setDepartment(department);
session.save(department);
session.save(address);
departmentID = department.getId();
addressId = address.getId();
tx.commit();
}
try (Session session = SessionUtil.getSession()) {
department = session.load(Department.class, departmentID);
System.out.println(department.getId());
}
}
,當我從分貝以下查詢執行加載部門的對象。
Hibernate: select department0_.id as id1_2_0_, department0_.name as name2_2_0_ from Department department0_ where department0_.id=?
Hibernate: select address0_.id as id1_0_1_, address0_.city as city2_0_1_, address0_.department_id as departme4_0_1_, address0_.street as street3_0_1_, department1_.id as id1_2_0_, department1_.name as name2_2_0_ from Address address0_ left outer join Department department1_ on address0_.department_id=department1_.id where address0_.department_id=?
1
我很驚訝看到聯接選擇查詢,因爲我從來沒有要求一個地址對象明確,它應該被延遲加載。