Probleme de methode paramétrable

juliette123 Messages postés 23 Statut Membre -  
juliette123 Messages postés 23 Statut Membre -
Bonjour,
bonjour,
je travaille avec struts et hibernate,et j'ai un probleme assez bizard
j'ai 2 tables:ObjIndiv et Phase qui ont une association many to one.
dans ma jsp j'ai 2 listes deroulante,l'une pour ObjIndiv et l'autre pour Phase,et lorsque je selectionne un objIndiv,il faut que la liste phase se met à jour,pour cela je recupère l'id(codeObjIndiv) de la valeur selectionnée via ajax et je le retourne comme paramètre dans une methode qui me cherche les phases,mais ça me retourne une liste vide.
voici la table Phase:phase.hbm.xml

<hibernate-mapping>
    <class name="data.Phase" table="PHASE" schema="BASE">
        <id name="idphase" type="java.lang.Long">
            <column name="IDPHASE" precision="22" scale="0" />
            <generator class="increment"></generator>
        </id>
        <many-to-one name="objIndiv" class="data.ObjIndiv" fetch="select">
            <column name="CODE_OBJ_INDIV" length="20" not-null="true" />
        </many-to-one>
.............:

la classe phase

public class Phase extends AbstractPhase implements java.io.Serializable {
 
    // Constructors
 
    /** default constructor */
    public Phase() {
    }
 
	/** minimal constructor */
    public Phase(ObjIndiv objIndiv, Long numphase) {
        super(objIndiv, numphase);        
    }
    
    /** full constructor */
    public Phase(ObjIndiv objIndiv, String libellePhase, Date dateDeb, Date dateFin, String duree, Long numphase, Set necessiters) {
        super(objIndiv, libellePhase, dateDeb, dateFin, duree, numphase, necessiters);        
    }

la methode qui retourne les phases

public static List getPhase(String code){
		Session session = HibernateSessionFactory.getSession();
		List list = null;
		
		
		
		try{
Query query=session.createQuery(" from Phase where objIndiv= '"+code+"'");
			
			
			list =query.list();
			
			
		}catch(Exception ex){
			ex.printStackTrace();
		}
		return list;
	}

le probleme c'est quand je rentre le code manuellement,genre:

Query query=session.createQuery(" from Phase where objIndiv= 'oo'");

ça fonctionne parfaitement,ce probleme me rend vraiment dingue
merci de bien vouloir m'aider

2 réponses

Marco la baraque Messages postés 1030 Statut Contributeur 329
 
Salut Juliette.
Deux points :
- est-tu sûre que la string que tu passes à public static List getPhase(String code) n'est pas nulle

- le probleme c'est quand je rentre le code manuellement,genre:
Query query=session.createQuery(" from Phase where objIndiv= 'oo'");
ça fonctionne parfaitement

Moi c'est ça que je trouve étrange. Ta classe Phase a un attribut objIndiv de type ObjIndiv, et non pas de type String si j'ai bien compris, donc je ne vois pas pourquoi ça marche.
D'après moi, avec une requête du genre : from Phase where objIndiv.id= 'oo' ça devrait fonctionner (si on considère que ta classe ObjIndiv a un attribut "id" de type string : le code, avec le getter qui va bien).

Cordialement,
0
juliette123
 
Pour le premier point j'ai fait:
<input type="text" id='phase' value="<%=request.getParameter("codeObjIndiv") %>"/>


et ça me retourne le code,donc le string n'est pas null.

Pour le deuxieme,non seulement cette requette marche
:from Phase where objIndiv= 'oo'");

mais aussi lorsque je fais:
public static List getPhase(String code){
		Session session = HibernateSessionFactory.getSession();
		List list = null;
		
		
		
		try{
			Query query=session.createQuery(" from Phase where objIndiv= '"+code+"'");


et dans la jsp:
Iterator it11 = GetList.getPhase("oo").iterator


j'ai pensé à mettre:
getPhase(ObjIndiv code)

mais le code retourné est un string,et ne peux pas etre paramètre de cette methode
0
Marco la baraque Messages postés 1030 Statut Contributeur 329
 
Bonjour,
As-tu essayé ceci : D'après moi, avec une requête du genre : from Phase where objIndiv.id= 'oo' ça devrait fonctionner (si on considère que ta classe ObjIndiv a un attribut "id" de type string : le code, avec le getter qui va bien). ?

Peux tu me donner le code de ta classe ObjIndiv stp ?

Merci
0
juliette123 Messages postés 23 Statut Membre 3 > Marco la baraque Messages postés 1030 Statut Contributeur
 
effectivement une requette du genre
from phase where objIndiv.codeObjIndiv='oo' 
marche ,mais encore une fois la requette:
 from phase where objIndiv.codeObjIndiv='"+code+"'" 
ne marche pas.
voici la classe ObjIndiv:
public class ObjIndiv extends AbstractObjIndiv implements java.io.Serializable {
    // Constructors

    /** default constructor */
    public ObjIndiv() {
    }

	/** minimal constructor */
    public ObjIndiv(String codeObjIndiv, ObjGlob objGlob, Utilisateur utilisateur) {
        super(codeObjIndiv, objGlob, utilisateur);        
    }
    
    /** full constructor */
    public ObjIndiv(String codeObjIndiv, ObjGlob objGlob, Utilisateur utilisateur, String libelleObjIndiv, String domaine, String hypothese, Long numobj, Set phases) {
        super(codeObjIndiv, objGlob, utilisateur, libelleObjIndiv, domaine, hypothese, numobj, phases);        
    }


et voici la classe AbstractObjIndiv:
public abstract class AbstractObjIndiv  implements java.io.Serializable {


    // Fields    

     private String codeObjIndiv;
     private ObjGlob objGlob;
     private Utilisateur utilisateur;
     private String libelleObjIndiv;
     private String domaine;
     private String hypothese;
     private Long numobj;
     private Set phases = new HashSet(0);


    // Constructors

    /** default constructor */
    public AbstractObjIndiv() {
    }

	/** minimal constructor */
    public AbstractObjIndiv(String codeObjIndiv, ObjGlob objGlob, Utilisateur utilisateur) {
        this.codeObjIndiv = codeObjIndiv;
        this.objGlob = objGlob;
        this.utilisateur = utilisateur;
    }
    
    /** full constructor */
    public AbstractObjIndiv(String codeObjIndiv, ObjGlob objGlob, Utilisateur utilisateur, String libelleObjIndiv, String domaine, String hypothese, Long numobj, Set phases) {
        this.codeObjIndiv = codeObjIndiv;
        this.objGlob = objGlob;
        this.utilisateur = utilisateur;
        this.libelleObjIndiv = libelleObjIndiv;
        this.domaine = domaine;
        this.hypothese = hypothese;
        this.numobj = numobj;
        this.phases = phases;
    }

   
    // Property accessors
0