我对 Hibernate 和 LazyInitializationException 有疑问。我搜索并找到了很多答案,但我不能用它们来解决我的问题,因为我不得不说,我是 Hibernate 的新手。
我运行 JUnit 测试,以防出现以下错误:
@Test
public void testAddPerson() {
Set<Person> persons = service.getAllPersons();
// create new person
Person person = new Person();
person.setEmail("john@doe.com");
Project testProject = serviceProj.findProjectById(1);
HashSet<Project> lister = new HashSet<Project>();
lister.add(testProject);
person.setProjects(lister);
service.addPerson(person);
testProject.getPersons().add(person);
...
}
最后显示的行:
testProject.getPersons().add(person);
抛出此错误:
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.doe.john.domain.Project.persons, no session or session was closed
Person 和 Project 是双向的 n:m:
人.java:
@ManyToMany(mappedBy="persons")
private Set<Project> projects = new HashSet<Project>();
项目.java:
@ManyToMany
@JoinTable(name = "Project_Person",
joinColumns = {@JoinColumn(name="project_id", referencedColumnName="id")},
inverseJoinColumns = {@JoinColumn(name="person_id", referencedColumnName="id")}
)
private Set<Person> persons = new HashSet<Person>();
所以有什么问题?