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 :

Don't flush the Session after an exception occurs


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 15
    Par défaut Don't flush the Session after an exception occurs
    Bonjour,
    J’ai un petit problème avec Hybernate et je n’arrive pas à m’en débarrasser.
    J’ouvre une session pour toute l’application et lors d’un traitement qui aboutit sur une erreur (voulue), je récupère bien mon message d’erreur mais ca plante ensuite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Transaction tx=null;
            try {
                tx = session.beginTransaction();
                session.save(projet);
                session.getTransaction().commit();
            } catch (Throwable exc) {
                if (tx != null){tx.rollback();}
                ErreurUtil.encapsulerException(exc);
            }
            finally{
               //session.flush();
            }
    mon exception remonte bien, j'ouvre ma pop up et la page se recharge ce qui refait un appel hibernate : “don't flush the Session after an exception occurs”

    Je pensais que le rollback suffirait mais il doit y avoir un autre problème, avez vous une idée ?

  2. #2
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 15
    Par défaut
    J'ajoute du détail :
    ma première requête plante parce que je fais un save sur un objet avec une champs unique qui existe déjà (c'est voulu c'est pour tester)
    Contenu table :
    id code code_acteur_responsable
    1 TMA XXX
    ...
    5 test YYY
    requete : ajouter 6 | "test" | "YYY"

    "test" devant être unique. Erreur :""could not insert" (niquel)

    La deuxieme requete est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            try {
                session.beginTransaction();
                List<Acteur> results = session.createCriteria(
                        Acteur.class).addOrder(Order.asc("code")).list();
                session.getTransaction().commit();
                return results;
            } catch (Throwable exc) {
                ErreurUtil.encapsulerException(exc);
                return null;
            }
    Qui me donne :
    "null id in fr.machin.Projet entry (don't flush the Session after an exception occurs)"
    J'ai ajouté un session.clear() qui résoud le problème mais je ne sais pas pour autant si cetet solution est propre... .
    catch (Throwable exc) {
    tx.rollback();
    session.clear();
    ErreurUtil.encapsulerException(exc);...
    }

Discussions similaires

  1. Réponses: 3
    Dernier message: 13/12/2012, 07h47
  2. Erreur "Cannot create a session after the response has been committed"
    Par aurelientp dans le forum Développement Web en Java
    Réponses: 0
    Dernier message: 07/12/2011, 11h14
  3. Réponses: 0
    Dernier message: 06/05/2011, 10h56
  4. [WebForms][1.1] Unable to make the session state request
    Par the_bmo dans le forum Général Dotnet
    Réponses: 7
    Dernier message: 12/10/2005, 14h27
  5. Réponses: 2
    Dernier message: 27/09/2005, 16h32

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