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 :

Vider une table sous MySQL avec Hibernate [Hibernate2]


Sujet :

Hibernate Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2010
    Messages : 129
    Points : 84
    Points
    84
    Par défaut Vider une table sous MySQL avec Hibernate
    Bonjour,

    Je suis débutant sur Hibernate, et j'ai crée une fonction pour que je vide totalement ma table ( sur MySQL).
    Voilà ma fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public static void viderBase() throws Exception
    {
    	Session session = connect();
     
    	Query query = session.createSQLQuery("DELETE FROM matable");
     
    }
    Mais ça ne marche pas, j'ai essayé TRUNCATE aussi.
    La connexion et l'insertion des objets via Hibernate se passe très bien , il reste que cette fonction de vidage de table qui ne marche pas.

    Est-ce qu'il y a une façon particulière pour le faire ?
    Merci

  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
    Et en faisant un uniqueResult() sur ta query ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2010
    Messages : 129
    Points : 84
    Points
    84
    Par défaut
    Citation Envoyé par fr1man Voir le message
    Et en faisant un uniqueResult() sur ta query ?
    Je viens de le faire, ça ne marche toujours pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public static void viderBase() throws Exception
    {
    	Session session = connect();
     
    	Query query = session.createSQLQuery("DELETE FROM matable");
     
    	query.uniqueResult();
    }

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 952
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 952
    Points : 4 378
    Points
    4 378
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    query.executeUpdate();

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2010
    Messages : 129
    Points : 84
    Points
    84
    Par défaut
    Citation Envoyé par JeitEmgie Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    query.executeUpdate();
    J'ai testé avec excuteUpdate(), ça ne marche toujours pas.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2010
    Messages : 129
    Points : 84
    Points
    84
    Par défaut
    Ca marche !
    En fait, c'était à cause du close(), il fallait fermer la transaction et la session ouverte lors de la première connexion grâce à une fonction connect().
    Voilà le code qui marche :

    -Pour se connecter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public static Session connect() throws Exception
    {
    	if(sessionFactory == null)
    		sessionFactory = new Configuration().configure().buildSessionFactory();
     
    	Session session = sessionFactory.openSession();
    	session.beginTransaction();
     
    	return session;
    }
    -Pour fermer la session et la transaction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public static void close(Session session)throws Exception
    {
    	session.getTransaction().commit();
    	session.close();
    }
    Et pour finir voilà pour vider une table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public static void viderBase() throws Exception
    {
    	Session session = connect();
     
    	Query query = session.createSQLQuery("DELETE FROM matable");
     
    	query.executeUpdate();
     
    	close(session);
    }

    Mais j'avoue que je ne comprends pas pourquoi ce close() est à l'origine du problème, quelqu'un peut m'éclairer svp ?

  7. #7
    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
    Les données sont impactées en base au moment du commit, donc si tu ne le fais pas, tu ne les verras pas.
    A mon avis, tu gères mal tes sessions. (à moins que ce ne soit juste un petit exemple de code pour te faire la main, ou que tu as une bonne raison de faire comme ça)

    La méthode executeUpdate n'a pas l'air d'exister dans la version 2 d'Hibernate, tu es sur d'utiliser cette version ?

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2010
    Messages : 129
    Points : 84
    Points
    84
    Par défaut
    Citation Envoyé par fr1man Voir le message
    Les données sont impactées en base au moment du commit, donc si tu ne le fais pas, tu ne les verras pas.
    A mon avis, tu gères mal tes sessions. (à moins que ce ne soit juste un petit exemple de code pour te faire la main, ou que tu as une bonne raison de faire comme ça)

    La méthode executeUpdate n'a pas l'air d'exister dans la version 2 d'Hibernate, tu es sur d'utiliser cette version ?
    Oui je pense que je gère mal les sessions, car dans les fonctions comme GET, je n’exécute pas le close().
    Oui je viens de découvrir Hibernate ça doit être 5 jours.

    Euh j'utilise la version 3, voilà l'entête du XML:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <?xml version='1.0' encoding='utf-8' ?>
    <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

  9. #9
    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
    Donc si tu utilises la version 3, tout est normal pour la méthode executeUpdate.

    En fait, la plupart du temps, la durée de vie de ta session doit être courte, généralement le temps d'un aller retour serveur par une requête http, par exemple.
    Elle ne doit pas avoir une durée de vie équivalente à celle de ton application, contrairement à la session factory.

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

Discussions similaires

  1. [MySQL] update d'une table sous MySQl
    Par sniper_marra dans le forum PHP & Base de données
    Réponses: 16
    Dernier message: 17/08/2008, 23h27
  2. creation d'une table sous mysql
    Par DJERDJAR YACINE dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 01/07/2007, 00h20
  3. Comment créer une BD et une table sous MySQL.
    Par User dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 12/03/2007, 16h16
  4. Impossible d'importer un fichier csv dans une table sous MySQL
    Par manue85 dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 20/04/2006, 12h06
  5. pb pour vider une table sous sql
    Par xence dans le forum Langage SQL
    Réponses: 3
    Dernier message: 24/03/2006, 08h09

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