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:
Person.java :
@ManyToMany(mappedBy="persons")
private Set<Project> projects = new HashSet<Project>();
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>();
だから問題は何ですか?