Recherche d un enregistrement en utilisant Hibernate et Struts

Recherche d un enregistrement en utilisant Hibernate et Struts - Java - Programmation

Marsh Posté le 16-04-2010 à 20:15:28    

Bsr
Actuellement je travaille à un projet ou j'utilise Hibernate et struts au niveau de l'intégration de ces 2 framework je n ai pas des problèmes mais mon problème c est au niveau de la recherche d'un enregistrement  
et voici mon code:
 

Code :
  1. package com.struts.controleur;
  2. import java.util.Iterator;
  3. import org.hibernate.*;
  4. import com.gestion.Personne;
  5. import com.util.HibernateUtil;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import org.apache.struts.action.Action;
  9. import org.apache.struts.action.ActionForm;
  10. import org.apache.struts.action.ActionForward;
  11. import org.apache.struts.action.ActionMapping;
  12. import com.struts.data.PersonneForm;
  13. public final class RecherchePersonnAction extends Action {
  14. public ActionForward execute(ActionMapping mapping, ActionForm form,
  15.                                HttpServletRequest req,
  16.                                HttpServletResponse res) throws Exception {
  17.  String resultat = null;
  18.  int id = ((PersonneForm) form).getId();
  19.  String nomPersonne = ((PersonneForm) form).getNom();
  20.  String prenomPersonne = ((PersonneForm) form).getPrenom();
  21.  try{
  22.    Session session = HibernateUtil.getSessionFactory().getCurrentSession();
  23.    session.beginTransaction();
  24.    Personne p1 = new Personne();
  25.    p1.setId(id);
  26.    p1.setNom(nomPersonne);
  27.    p1.setPrenom(prenomPersonne);
  28. //ici je recherche en utilisant requête  
  29.    String query = "select p.Id, p.Nom , p.Prenom from gestion.personne p where p.Id ="+id;
  30. Iterator results = session.createSQLQuery(query).list().iterator();
  31.    while(results.hasNext())
  32.    {
  33.     Object[] row = (Object[]) results.next();
  34.     Integer id1 = (Integer) row[0];
  35.     String nom1 = (String) row[1];
  36.     String prenom1 = (String) row[2];
  37.    }
  38.    session.getTransaction().commit();
  39.    HibernateUtil.getSessionFactory().close();
  40. //pour aller vers la page d affichage des infos recherché  
  41.    resultat = "succes";
  42.  }catch(Exception ex){
  43.   HibernateUtil.getSessionFactory().close();
  44.   resultat = "echec";
  45.  }
  46.  return mapping.findForward(resultat);
  47. }
  48. }


 
 
Mais quand je ne reçois rien à ma page d'affichage des informations  
Pourriez vous m aider
?
Merci d'avance

Reply

Marsh Posté le 16-04-2010 à 20:15:28   

Reply

Marsh Posté le 16-04-2010 à 22:23:32    

Tu crées un nouvel Objet Personne p1 que tu remplis mais tu n'en fais rien, pourquoi ?
Dans le parcours de ton iterator tu récupères le résultat mais tu n'en fais rien non plus ?
Finalement tu appelles findForward selon que c'est un succes/echec mais quand lui transmet-tu l'objet Personne à afficher ? Que fais ta page une fois redirigé ?
 
Quelques remarques sinon, puisque tu recherches un objet via son Id dans la table, tu peux utiliser session.createQuery("..." ).first() et vérifier si il est nul ou non. De même si tu as mappé ton objet dans la conf d'hibernate tu n'as pas besoin de charger id, nom, prenom, tu peux charger directement l'objet, à moins que le nombre de colonnes soit trop grand et que tu ne veuilles effectivement que ces 3 là, mais pour l'instant tu n'en fais rien.
Tu devrais regarder dans la doc d'hibernate ou voir via spring pour gérer le côté transactionnel de tes requêtes ainsi que la gestion des sessions hibernate.
 

Code :
  1. package com.struts.controleur;
  2. public final class RecherchePersonnAction extends Action {
  3.     public ActionForward execute(ActionMapping mapping, ActionForm form,
  4.                                  HttpServletRequest req, HttpServletResponse res) throws Exception {
  5.         String resultat = null;
  6.         PersonneForm pForm = (PersonneForm)form;
  7.         Session session = factory.openSession();
  8.         Transaction tx;
  9.         try {
  10.             tx = session.beginTransaction();
  11.             String query = "select p from gestion.personne p where p.Id = " + pForm.getId();
  12.             Personne pFound = (Personne)session.createQuery(query).first();
  13.             if (pFound != null) { // on a trouvé l'objet, que veux-tu en faire ?
  14.                 System.out.println("Objet Personne(id=" + pForm.getId() + ", " + pFound + " ) trouvé!" );
  15.                 resultat = "succes";
  16.             } else {
  17.                 System.out.println("Objet Personne(id=" + pForm.getId() + " ) non trouvé!" );
  18.                 resultat = "introuvable";
  19.             }
  20.             tx.commit();
  21.         } catch (Exception e) {
  22.             if (tx != null) tx.rollback();
  23.             e.printStackTrace();
  24.             resultat = "echec";
  25.         } finally {
  26.             session.close();
  27.         }
  28.         return mapping.findForward(resultat);
  29.     }
  30. }


 
As-tu activé le mode sql debug pour hibernate afin de vérifier les requêtes effectuées ?


---------------
Always wear a camera!
Reply

Marsh Posté le 19-04-2010 à 14:03:59    

Bonjour
Merci pour votre réponse
Je pense que la 1 ère méthode que j ai fait pour rechercher ce n est pas bon tel que actuellement j ai fait un nouveau méthode en utilisant Criteria  
Et voici mon code

Code :
  1. package com.struts.controleur;
  2. import java.util.Iterator;
  3. import org.hibernate.*;
  4. import org.hibernate.criterion.Restrictions;
  5. import antlr.collections.List;
  6. import com.gestion.Personne;
  7. import com.util.HibernateUtil;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import org.apache.struts.action.Action;
  11. import org.apache.struts.action.ActionForm;
  12. import org.apache.struts.action.ActionForward;
  13. import org.apache.struts.action.ActionMapping;
  14. import com.struts.data.PersonneForm;
  15. public final class RecherchePersonnAction extends Action {
  16. public ActionForward execute(ActionMapping mapping, ActionForm form,
  17.                                HttpServletRequest req,
  18.                                HttpServletResponse res) throws Exception {
  19.  String resultat = null;
  20.  int id = ((PersonneForm) form).getId();
  21.  String nomPersonne = ((PersonneForm) form).getNom();
  22.  String prenomPersonne = ((PersonneForm) form).getPrenom();
  23.  try{
  24.    Session session = HibernateUtil.getSessionFactory().getCurrentSession();
  25.    session.beginTransaction();
  26.         Criteria criteria =  session.createCriteria(Personne.class);
  27.        criteria.add(Restrictions.like("id",id));
  28.         java.util.List<String> results1 = criteria.list();
  29.         Iterator<String> results =  ((java.util.List) results1).iterator();
  30.         String s;
  31.         while(results.hasNext())
  32.    {
  33.      s = results.next();
  34.    }
  35.    session.getTransaction().commit();
  36.    HibernateUtil.getSessionFactory().close();
  37.    resultat = "succes";
  38.  }catch(Exception ex){
  39.   HibernateUtil.getSessionFactory().close();
  40.   resultat = "echec";
  41.  }
  42.  return mapping.findForward(resultat);
  43. }
  44. }


 
Mon prb actuellement que n entre pas au boucle ,le traitement se bloque a la boucle
 
et voici le code de ma page succes

Code :
  1. <%@ page language="java" %>
  2. <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
  3. <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
  4. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  5. <html:html>
  6.   <head>
  7.     <title>Succes</title>
  8.     <html:base/>
  9.   </head>
  10.   <body bgcolor="white">
  11.     <h1> Voici le nom de la personne recherché :
  12.  <bean:write name="PersonneForm" property="nom" />
  13. </h1>
  14.    </body>
  15. </html:html>


 
Est ce que je suis en bon chemin ou bien non?
Merci d avance

Reply

Marsh Posté le 22-04-2010 à 01:09:12    

On peut avoir le fichier de mapping de ta classe Personne.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed