Hibernate 4 StatelessSession Lazy Загрузка участников

То, что я пытаюсь сделать в спящем режиме, очень просто с обычными сессиями. Однако я пытаюсь сделать это с помощью сеанса без сохранения состояния. В основном, у меня есть сотрудник. Каждый сотрудник может иметь одну или несколько книг. Я хочу иметь возможность загружать сотрудника, а затем лениво загружать книги.

То, как я сейчас это делаю,

  1. загрузка сотрудника по его идентификатору
  2. Запуск HQL для получения списка всех книг, связанных с сотрудником
  3. обновление ссылки на родительский объект в коллекции книг, чтобы указывать на сотрудника.

Есть ли более простой способ сделать это с помощью сеансов без сохранения состояния?

    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;
    }
}

0 ответов

Другие вопросы по тегам