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

Hibernate Java Discussion :

refresh() lance une erreur


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2008
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 132
    Par défaut refresh() lance une erreur
    bonjour tous

    pour ajouter une nouvelle chaine(instance de la classe Chaine) dans la bd j'utilise le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SessionFactory factory = new Configuration().configure().buildSessionFactory();
    	Session session = factory.openSession();
    	session.beginTransaction();
    	Chaine chaine=new Chaine();
    	chaine.setNomChaine("ChaineX");
    	session.save(chaine);
    	session.getTransaction().commit();
    	factory.close();
    l'ajout se passe bien mais une fois je rajoute l'instruction suivante:
    session.refresh(chaine); après la ligne chaine.setNomChaine("ChaineX");
    j'obtiens l'erreur suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Exception in thread "main" org.hibernate.UnresolvableObjectException: No row with the given identifier exists: [hibernate.classes_de_persistance.Chaine#0]
    	at org.hibernate.UnresolvableObjectException.throwIfNull(UnresolvableObjectException.java:42)
    	at org.hibernate.event.def.DefaultRefreshEventListener.onRefresh(DefaultRefreshEventListener.java:126)
    	at org.hibernate.event.def.DefaultRefreshEventListener.onRefresh(DefaultRefreshEventListener.java:39)
    	at org.hibernate.impl.SessionImpl.fireRefresh(SessionImpl.java:902)
    	at org.hibernate.impl.SessionImpl.refresh(SessionImpl.java:886)
    	at hibernate.classes_DAO.GestionChaines.ajouterChaine(GestionChaines.java:24)
    	at hibernate.classes_DAO.Test.main(Test.java:11)
    ou se trouve le problème?

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    refresh charge l'état de la DB. Comme c'est une nouvelle entrée, tant que tu n'as pas au moins fait le save, tu ne peux pas faire le refresh, car hibernate ne connais pas ton instance.

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2008
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 132
    Par défaut
    ok,merci

    je vaudrais savoir à quoi sert la méthode flush() de l'objet session,

    autre question la fermeture de la session(session.close()) et la

    sessionfactory(sf.close()) est-il obligatoire ou optionnel?

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Tu ferme la session quand tu n'en a plus besoin. A partir de ce moment là, tes objet hibernate associés à cette session ne pourront plus etre mis à jour depuis la db, le lazyloading de ces objets ne marchera plus et l'objet session ne devra plus etre utilisé.

    Le close de la factory, on ne le fait normalement que lorsque l'on veut absolument se débarasser de celle-ci.

    Pour ce qui est flush(), il force un transfert vers la db de ce qui n'a pas encore été envoyé.

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/02/2011, 12h03
  2. Réponses: 4
    Dernier message: 30/04/2009, 14h13
  3. Réponses: 4
    Dernier message: 19/07/2007, 18h02
  4. [procédure PG] Une erreur mystérieuse...ou pas
    Par doohan dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 09/07/2003, 17h16
  5. Ne pas formater une erreur
    Par Sylvain Leray dans le forum XMLRAD
    Réponses: 2
    Dernier message: 18/03/2003, 14h13

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