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 :

Disparition d'enregistrements de la base [Débutant(e)]


Sujet :

Hibernate Java

  1. #1
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 219
    Points : 66
    Points
    66
    Par défaut Disparition d'enregistrements de la base
    Bonjour, je débute (d'aujourd'hui...) avec Hibernate 3 et je développe une servlet de type CRUD pour une table de ma base (avec POJO associé)
    Les fonctionnalités CRUD fonctionnent à priori bien mais la base de données se vide à l'arrêt de mon conteneur j2ee (Glassfish 3.1). Je suis certain que le problème est lié à la destruction de la session Hibernate mais je ne peux pas en dire plus. Voici la partie concernée de ma servlet :

    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException 
        {
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
            HttpSession httpSession = request.getSession();
            Transaction tx = null;
            List<Arrete> arlist = null;
     
            try 
            {
                Session session = HibernateUtil.getSession();
     
     
                if(request.getParameter("action") != null && request.getParameter("id") != null)
                {
                    String action = request.getParameter("action");
                    int id = Integer.parseInt(request.getParameter("id"));
                    System.out.println("ID : " + id);
     
                    try
                    {
                        if(action.equals("delete"))
                        {
                            session.createQuery("delete from Arrete where id = :id").setParameter("id", id).executeUpdate();
                        }
                        tx = session.beginTransaction();
                        tx.commit();
                    }
     
                    catch(Exception e)
                    {
                        System.out.println(e.getMessage());
                        tx.rollback();
                    }
     
                    finally
                    {
                        response.sendRedirect("ArreteServlet");
                    }
                }
     
                if(request.getParameter("titre") != null && request.getParameter("date") != null)
                {
                    if(request.getParameter("titre").length() > 2 && request.getParameter("titre").length() < 15 && request.getParameter("date").length() == 10)
                    {
                        Arrete ar = new Arrete();
                        ar.setTitre(request.getParameter("titre"));
                        ar.setDate(request.getParameter("date"));
     
                        if(request.getParameter("description") != null && request.getParameter("description").length() > 2 && request.getParameter("description").length() < 50)
                        {
                            ar.setDecription(request.getParameter("description"));
                        }                
                        session.save(ar);
                        try
                        {                       
                            tx = session.beginTransaction();
                            tx.commit();
                        }
     
                        catch(Exception e)
                        {
                            System.out.println(e.getMessage());
                            tx.rollback();
                        }
     
                        finally
                        {
                            response.sendRedirect("ArreteServlet");
                        }
                    }
                }
     
                else
                {
                    arlist = session.createQuery("from Arrete").list();
                    httpSession.setAttribute("arlist", arlist);
                    response.sendRedirect("jsp/arretes/liste_arretes.jsp");
                }
     
                session.close();
            } 
     
            catch(Exception e)
            {
                System.out.print(e.getMessage());
            }
     
            finally 
            {            
                out.close();
            }
    Je pense que c'est un truc de débutant du genre bateau mais disposant de plusieurs sources de référence fragmentées j'ai un peu de mal à l'apprentissage.

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Quelles sont les options au niveau Hibernate ?
    Tu utilises le fichier hibernate.cfg.xml ?

  3. #3
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 219
    Points : 66
    Points
    66
    Par défaut
    En effet, voici ce qui clochait dans mon fichier de configuration :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <property name="hbm2ddl.auto">create</property>
    Je savais que c'était un truc bidon, merci.

    PS : n'y aurait il pas un moyen plus simple de procéder pour le CRUD avec hibernate que ça ?

    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
    54
    55
    56
    57
    58
    59
    if(request.getParameter("action") != null && request.getParameter("id") != null)
                {
                    String action = request.getParameter("action");
                    int id = Integer.parseInt(request.getParameter("id"));
                    System.out.println("ID : " + id);
     
                    try
                    {
                        if(action.equals("delete"))
                        {
                            session.createQuery("delete from Arrete where id = :id").setParameter("id", id).executeUpdate();
                        }
                        tx = session.beginTransaction();
                        tx.commit();
                    }
     
                    catch(Exception e)
                    {
                        System.out.println(e.getMessage());
                        tx.rollback();
                    }
     
                    finally
                    {
                        response.sendRedirect("ArreteServlet");
                    }
                }
     
                if(request.getParameter("titre") != null && request.getParameter("date") != null)
                {
                    if(request.getParameter("titre").length() > 2 && request.getParameter("titre").length() < 15 && request.getParameter("date").length() == 10)
                    {
                        Arrete ar = new Arrete();
                        ar.setTitre(request.getParameter("titre"));
                        ar.setDate(request.getParameter("date"));
     
                        if(request.getParameter("description") != null && request.getParameter("description").length() > 2 && request.getParameter("description").length() < 50)
                        {
                            ar.setDecription(request.getParameter("description"));
                        }                
                        session.save(ar);
                        try
                        {                       
                            tx = session.beginTransaction();
                            tx.commit();
                        }
     
                        catch(Exception e)
                        {
                            System.out.println(e.getMessage());
                            tx.rollback();
                        }
     
                        finally
                        {
                            response.sendRedirect("ArreteServlet");
                        }
                    }
                }
    En instanciant un POJO, puis lui assignant via le setter l'id récupéré en paramètre, est ce que supprimer ensuite cet objet supprime l'enregistrement avec le même id dans la base ? Ou faut il obligatoirement exécuter une requête ? (hql ou sql)
    J'essaie de suivre la doc chez jboss mais elle n'est pas très complète au niveau des exemples qui sont limités à chaque fois aux requêtes select.

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Il n'y a pas besoin de faire de requête quand tu utilises la clé primaire, tu peux te contenter de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    session.delete(session.get(class, id));

Discussions similaires

  1. AdoQuery:Transfert d'enregistrements entre deux bases access
    Par jnc dans le forum Bases de données
    Réponses: 8
    Dernier message: 28/01/2006, 13h39
  2. Réponses: 1
    Dernier message: 27/01/2006, 14h06
  3. [PB] enregistrement de la Base
    Par warraf dans le forum Access
    Réponses: 4
    Dernier message: 22/11/2005, 14h04
  4. Réponses: 1
    Dernier message: 04/11/2005, 23h26
  5. extraire un enregistrement d'une base Paradox
    Par k2fik dans le forum Bases de données
    Réponses: 1
    Dernier message: 17/12/2004, 16h54

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