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/