J'ai un problème avec Hibernate et l'exception LazyInitializationException. J'ai cherché et trouvé beaucoup de réponses, mais je ne peux pas les utiliser pour résoudre mon problème, parce que je dois dire, je suis nouveau à Hibernate.Hibernate -> LazyInitializationException avec une relation n: m
I exécuter des tests JUnit, en cas de l'erreur celui-ci:
@Test
public void testAddPerson() {
Set<Person> persons = service.getAllPersons();
// create new person
Person person = new Person();
person.setEmail("[email protected]");
Project testProject = serviceProj.findProjectById(1);
HashSet<Project> lister = new HashSet<Project>();
lister.add(testProject);
person.setProjects(lister);
service.addPerson(person);
testProject.getPersons().add(person);
...
}
La dernière ligne montre:
testProject.getPersons().add(person);
jette cette erreur:
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.doe.john.domain.Project.persons, no session or session was closed
personne et projet bidirectionnel 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>();
Alors, quel est le problème?
Oui, mais si je voulais fais ici FetchType.EAGER, j'ai dans ma vraie application des choses chargées qui ne sont pas nécessaires. – Tim
Ai-je besoin de la ligne "testProject.getPersons(). Add (person);" ? J'ajoute un projet à une personne. Donc ça devrait être dans la tbale n: m join, n'est-ce pas? – Tim
Cela signifie que vous devez aller pour ma première suggestion ... – willcodejavaforfood