Bonjour a tous,

dans un projet, j'utilise Spring 2.5.4 et hibernate 3.2.5. jdk 1.4.

mon problème est la gestion des sessions avec hibernate

je récupere en db une personne

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
public class Person {
       private String lastName;
       private String firstName;
       private Date birthDate;
       ...
       private Set telephone; 
}
public class Telephone {
      private int number;
      private String type;
      ....
}
 
public class PersonDaoImpl extends HibernateDaoSupport implements PersonDao {
 
           public Person getOneById (int personId) {
                 return getSession().createCriteria(Person.class).add (Restrictions.eq("personId",personId)).uniqueResult();
           }
 
 
}
je remonte l'info dans un formulaire updatePerson.jsp
ou je n'affiche que quelque info modifiable + id personne

lorsque je fait un submit, dans mon controller spring je récupere la Personne via son id
je modifie les infos updatée

ensuite je sauvegarde les donnée en db via cette méthode

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
public void saveOrUpdate (Person person) {
        getSession().saveOrUpdate(person);
}
et la j'ai un exeption

org.springframework.orm.hibernate3.HibernateSystem Exception: Illegal attempt to associate a collection with two open sessions;

j'ai essayé de modifer ma méthode save or update de cette façon
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
Session session = getSession();
session.evict(person);
session.saveOrUpdate(person);
sans succès
car mon objet se trouve dans la session crée lors du getPersonById et non celle que j'utilise dans mon saveOrUpdate

comment faut il faire pour garder la même session hibernate pour chaque appelle client/serveur ?

est ce que ma façons d'écrire les dao est correcte ?