IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Persistance des données Java Discussion :

[Hibernate] illegally attempted to associate a proxy with two open Sessions


Sujet :

Persistance des données Java

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Points : 407
    Points
    407
    Par défaut [Hibernate] illegally attempted to associate a proxy with two open Sessions
    Bonjour a tous,

    j'ai l'exception suivante quand j'effectue certaine operation, et je ne trouve pas pourquoi.

    Ca se produit entre autre quand je fait un delete et un update. (mais par sur tous mes objets).

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    public class Hibernate
    {
    	protected static final SessionFactory sessionFactory;
    	static 
    	{
    		try 
    		{
    			// Create the SessionFactory from hibernate.cfg.xml
    			sessionFactory = new Configuration().configure().buildSessionFactory();
    		} 
    		catch (Throwable ex) 
    		{
    			// Make sure you log the exception, as it might be swallowed
    			System.err.println("Initial SessionFactory creation failed." + ex);
    			throw new ExceptionInInitializerError(ex);
    		}
    	}
     
    	public void create(Object obj)
    	{
    		Session session = sessionFactory.openSession();
    		session.getTransaction().begin();
    		session.save(obj);
    		session.getTransaction().commit();	
    	}
     
    	public void refresh(Object obj)
    	{
    		Session session = sessionFactory.openSession();
    		session.getTransaction().begin();
    		session.refresh(obj);
    		session.getTransaction().commit();			
    	}
     
    	public void update(Object obj)
    	{
    		Session session = sessionFactory.openSession();
    		session.getTransaction().begin();		
    		session.saveOrUpdate(obj);
    		session.getTransaction().commit();		
    	}
    	public void delete(Object obj)
    	{
    		Session session = sessionFactory.openSession();
    		session.getTransaction().begin();
    		session.delete(obj);
    		session.getTransaction().commit();		
    	}
    	protected String protectString(String toProtect)
    	{
    		return (toProtect.replace("'", "''"));
    	}
    }
    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
    23
    24
    25
    26
    27
    public class DAOPerson extends Hibernate
    {
     
    	@SuppressWarnings("unchecked")
    	public List<Person> findByName(String name)
    	{
    		Session session = sessionFactory.openSession();
    		List<Person> List = session.createQuery("FROM Person WHERE FirstName LIKE '%" + this.protectString(name) + "%' OR LastName LIKE '%" + this.protectString(name) + "%' ORDER BY LastName ASC, FirstName ASC").list();
    		return (List);
    	}
     
    	@SuppressWarnings("unchecked")
    	public List<Person> findByFullName(String lastName, String firstName)
    	{
    		Session session = sessionFactory.openSession();
    		List<Person> List = session.createQuery("FROM Person WHERE FirstName='" + this.protectString(firstName) + "' AND LastName='" + this.protectString(lastName) + "'").list();
    		return (List);
    	}
     
    	@SuppressWarnings("unchecked")
    	public List<Person> findAll() 
    	{
    		Session session = sessionFactory.openSession();
    		List<Person> List = (List<Person>)session.createQuery("From Person ORDER BY LastName ASC, FirstName ASC").list();
    		return (List);
    	}
    }
    Si vous pouviez me guider ca serait sympa car je ne trouve vraiment pas, je ne comprend meme pas l'exception.
    J'ai trouver deux autre topics la dessus mais rien de concluant.

    Merci d'avance.

    Cordialement,
    NeoKript

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Soit tu fermes tes sessions à chaque fin de méthode create, refresh, update etc...
    Soit tu utilises les mécanismes de sessions contextuelles, associées à un thread, une transaction ou autre. Tu trouveras des informations à ce sujet dans la documentation officielle.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Points : 407
    Points
    407
    Par défaut
    Salut,

    Quand je met, session.close() a chaque fin de methode
    j'ai l'exception suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    could not initialize proxy - no Session

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Points : 407
    Points
    407
    Par défaut
    J'ai l'impression que le delete/updateorsave fonctionne uniquement quand il n'y a pas de ForeignKeys.

    Est-ce que cela peut-etre lie, car quand toutes les valeurs des foreignkey sont nulles cela fonctionne .

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Points : 407
    Points
    407
    Par défaut
    Apres de nombreuses modifications,
    il m'est toujours impossible de supprimer ou de modifier un utilisateur...

    Si quelqu'un pouvais m'aider.

    Merci d'avance

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    ton utilisation est incohérente. Avec hibernate: on ouvre une session, on prend des opbjet, on les manipule, on les sauve, et on ferme la session. Et c'est autour de ça qu'on met la transaction. La tu fais des microtransaction qui ne protègent rien, tu ne ferme pas tes session et tu balade joyeusement tes objets d'une session à l'autre. C'est mal.

    Comme dit, soit tu ferme systématiquement ta session (et alors adieu le lazy) soit tu garde ta session plus longtemps et tu la réutilise.

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Points : 407
    Points
    407
    Par défaut
    Salut et merci pour ta reponse,

    d'apres ce que je comprend, il faut donc au chargement de l'application que je load tous mes objets, que je ne fasse plus de requetes de recuperation de ceux-ci, que je fasse mes operations dessus et que a la fin je sauvegarde tout d'un coup ?

    Et concernant les sessions, j'ouvre une session, je la garde tout le temps que l'application est ouverte et lorsque je quitte l'application je close la session, et pendant que l'application tourne je peux faire des commits sur des transaction pour modifier des objets, les deletes .. etc ?


    Merci pour ces precisions

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    ouais, enfin il vaut quand même mieux hacher ton travail. Un utilisateur veux modifier un objet:

    session, get de l'objet, interface d'edition, save de l'objet, fermeture de session.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 13
    Dernier message: 01/03/2011, 17h12
  2. [Data] illegally attempted to associate a proxy with two open Sessions
    Par lotfi-g dans le forum Spring
    Réponses: 1
    Dernier message: 02/01/2011, 14h24
  3. Réponses: 2
    Dernier message: 13/10/2006, 17h38
  4. Réponses: 4
    Dernier message: 20/07/2006, 17h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo