Spring Метод CruDRepository findOne(id), выбрасывающий org.hibernate.LazyInitializationException: не удалось инициализировать прокси - нет сеанса

У меня есть объект Employee, в котором я могу правильно получить описание и имя, но он не работает, когда он пытается получить коллекцию. Я установил тип выборки как нетерпеливый.

У меня есть следующий код в моем контроллере:

Employee emp = employeeRepository.findOne(id);
emp.getName()
emp.getDescription();
emp.getProjects() // throws exception on this line

Вот мой сотрудник

@Entity
public class Employee {

....

    /** The name. */
    @NotNull
    @Size(max = 30)
    private String name;

    /** The description. */
    @NotNull
    @Size(max = 250)
    private String description;

....

    @ElementCollection
    @CollectionTable(name = "Projects", joinColumns = @JoinColumn(name = "emp_ID"))
    @Basic(fetch = FetchType.EAGER)
    private Set<Project> projects = new HashSet<Project>();

Я не уверен, почему сессия перестает существовать.

1 ответ

Насколько я знаю, ElementCollection работает только для базовых типов.

В документации сказано:

В некоторых ситуациях вам не нужно связывать две сущности, а просто создавать коллекцию базовых типов или встраиваемых объектов. Используйте @ElementCollection для этого случая.

В этом случае вам нужно использовать традиционные отношения OneToMany. Вот хороший учебник: http://viralpatel.net/blogs/hibernate-one-to-one-mapping-tutorial-using-annotation/

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