Commit d053c221 by Patryk Czarnik

Komentarze nt LAZY/EAGER

parent dd484e46
......@@ -25,6 +25,15 @@ public class Department extends AbstractEntity {
@JoinColumn(name = "location_id")
private hr.model.Location location;
/* Kolekcje (List i Set) prowadzące do innych obiektów encji
są domyślnie wiązane w trybie LAZY.
Oznacza to, że lista nie jest od razu uzupełniane elementami,
a następuje to dopiero przy pierwszym dostępie do jej zawartości.
W trybie EAGER lista byłaby wypeniana danymi od razu,
co byłoby potencjalnie dużym problemem wydajnościowym
(zwn na dalsze powiązania tamtych obiektów itd...)
*/
@OneToMany(mappedBy = "department")
private Set<Employee> employees = new LinkedHashSet<>();
......
......@@ -29,10 +29,6 @@ public class Employee extends AbstractEntity {
@Column(name = "hire_date", nullable = false)
private LocalDate hireDate;
@ManyToOne(optional = false)
@JoinColumn(name = "job_id", nullable = false)
private hr.model.Job job;
@Column(name = "salary", precision = 8, scale = 2)
private BigDecimal salary;
......@@ -42,10 +38,23 @@ public class Employee extends AbstractEntity {
@Column(name = "manager_id")
private Integer manager;
/* Zwykłe pola domyślnie są podłączane jako "EAGER",
czyli są wczytywane wraz z obiektem głównym.
Jeśli jednak oznaczymy zależność jako LAZY, to obiekt Department zostanie załądowany dopiero
przy pierwszym dostępnei do jego pól.
Technicznie jest realizowane za pomocą "klasy proxy", którą dynamicznie tworzy Hibernate.
Aby to działało, klasa Department nie moze być final.
*/
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "department_id")
private Department department;
/* Job jest wczytywany w trybie EAGER, czyli od razu wraz z obiektem Employee.
*/
@ManyToOne(optional = false)
@JoinColumn(name = "job_id", nullable = false)
private Job job;
public Integer getId() {
return id;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment