erreur avec la methode findBy
Salut ,
Bonjour , je développe une entreprise application JEE (avec l'EJB) avec netbeans 6.7 ,JSF et Wampserver , representant une interface web aux clients qui leurs permettent de s'inscrire en fournissant certains données au premier temps et de login et modifier leurs comptes ultérieurement .
Je manipule deux table dans ma base de données : table 'client' et table 'interest' .
Ma table client contient 3 colonnes : id , keyword et clientId .
Dans une de mes pages JSP , je veux afficher des lignes de ma table interest
suivant le critére " clientId= x " par exemple . Or j'utilise les EJB .
Il y' 5 methodes prédéfinies dans ma page 'InterestFacadeLocal' , deux parmi ces 5 aident pour la recherche qui sont : find et findAll .
La methode findAll ,je pense qu'elle ne permet pas d'effecture une recherche suivant un critére , elle rend toute les lignes de la table .
Donc , j'ai définit la methode suivante dans la page 'InterestFacade' :
Code:
1 2 3
| public List<Interest> findByClientId(String clientId ) {
return em.createQuery("select o from Interest as o where o.clientId= :clientId").setParameter("clientId", clientId).getResultList();
} |
J'ai ajouté ca dans la page 'InterestFacadeLocal' .
Code:
List<Interest> findByClogin(String clogin);
J'ai definit dans mon managedbean 'metier' la methode lists suivante :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
public String lists()
{ clientId =x;
System.out.println("--------1-------");
System.out.println("---------------"+clientId );
intlist =findByClientId (clientId );
System.out.println("--------2-------");
getIntlist ();
System.out.println("--------3-------");
return "lists";
} |
ou intlist est une une liste de interest .
Maintenant au moment du run , lorsque j'appelle la methode 'lists' en cliquant sur un bouton 'interests' j'obtient l'erreur suivant :
Code:
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
|
type Rapport d'exception
Message
DescriptionLe serveur a rencontré une erreur interne () qui l'a empêché de remplir cette requête.
Exception
javax.servlet.ServletException: #{metier.lists}: javax.ejb.EJBException
Cause racine
javax.faces.FacesException: #{metier.lists}: javax.ejb.EJBException
Cause racine
javax.faces.el.EvaluationException: javax.ejb.EJBException
Cause racine
javax.ejb.EJBException
Cause racine
java.lang.IllegalArgumentException: An exception occured while creating a query in EntityManager
Cause racine
Exception [TOPLINK-8026] (Oracle TopLink Essentials - 2.1 (Build b60e-fcs (12/23/2008))): oracle.toplink.essentials.exceptions.EJBQLException
Exception Description: Syntax error parsing the query [select o from Interest o where o.clientId= : clientId], line 1, column 44: unexpected char [ ].
note Les suivis de pile complets de l'exception et de ses causes principales sont disponibles dans les journaux Sun GlassFish Enterprise Server v2.1. |
L'output de glassfish est le suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
--------1-------
--------2-------x
EJB5018 : Une exception a été renvoyée lors d'un appel ejb sur [InterestFacade].
javax.ejb.EJBException
at com.sun.ejb.containers.BaseContainer.processSystemException(BaseContainer.java:3894)
at com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:3794)
at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:3596)
at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1379)
at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1316)
at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:205)
at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:127)
at $Proxy1022.findByClogin(Unknown Source)
at metier.metier.lists(metier.java:716)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.el.parser.AstValue.invoke(AstValue.java:187) |
Une idée ? Merci