Hibernate 4 StatelessSession Lazy Загрузка участников
То, что я пытаюсь сделать в спящем режиме, очень просто с обычными сессиями. Однако я пытаюсь сделать это с помощью сеанса без сохранения состояния. В основном, у меня есть сотрудник. Каждый сотрудник может иметь одну или несколько книг. Я хочу иметь возможность загружать сотрудника, а затем лениво загружать книги.
То, как я сейчас это делаю,
- загрузка сотрудника по его идентификатору
- Запуск HQL для получения списка всех книг, связанных с сотрудником
- обновление ссылки на родительский объект в коллекции книг, чтобы указывать на сотрудника.
Есть ли более простой способ сделать это с помощью сеансов без сохранения состояния?
StatelessSession session = factory.openStatelessSession(connection);
Employee employee = (Employee) session.get(Employee.class, 7L);
Query query = session.createQuery("from Book where owner= :owner_id ");
query.setParameter("owner_id", employee);
employee.books = query.list();
for (Book book : employee.books){
book.owner = employee;
}
ниже мои лица:
package com.company;
import javax.persistence.*;
import java.util.List;
@Entity
public class Employee {
@Id
@Column(name = "id_emp")
@GeneratedValue
public Long id;
@Column
String firstName;
@Column
String lastName;
@Column
@Basic(fetch = FetchType.LAZY)
public long Salary;
@OneToMany(mappedBy="owner", fetch=FetchType.LAZY)
public List<Books> books;
public Long getId() {
return id;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public long getSalary() {
return Salary;
}
public List<Books> getBooks() {
return books;
}
}
У сотрудника есть коллекция книг:
package com.company;
import javax.persistence.*;
@Entity
public class Books {
@Id
@Column(name = "id_book")
@GeneratedValue
public Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="owner")
public Employee owner;
public Long getId() {
return id;
}
public Employee getOwner() {
return owner;
}
}