[JPA] problème récupération de données
Bonjour !
Dans le cadre d'un projet manipulant des EJB, je rencontre un petit souci au niveau de la récupération de données avec JPA :
J'ai tout d'abord un EJB Entity :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
@Entity
@Table(name = "Utilisateur")
public class Utilisateur implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private String login;
@Column
private String pass;
@Column
private String nom;
@Column
private String prenom;
@Column
private String dateDeNaissance;
@OneToMany
private List<Utilisateur> amis = new ArrayList<Utilisateur>();
...
} |
J'ai ensuite un EJB session stateful :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
@Stateful
public class UtilisateurEJB implements UtilisateurEJBLocal {
@PersistenceContext(name = "AnnuaireEJB-ejbPU")
private EntityManager em;
...
@Override
public List<Utilisateur> findUtilisateurByNameAndFName(String name, String fname)
{
Query q = em.createQuery("SELECT u.nom, u.prenom FROM Utilisateur u WHERE u.nom = ? and u.prenom = ? ").setParameter(1,fname).setParameter(2, name);
return q.getResultList();
}
...
} |
Je n'ai mis que la fonction findUtilisateurByNameAndFName qui est celle qui pose problème.
Voilà tout pour mon conteneur EJB.
Maintenant dans mon conteneur web j'ai :
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 34 35 36 37 38
|
@ManagedBean(name="connexionBean")
@SessionScoped
public class UtilisateurJSFBean implements Serializable{
/**
* Creates a new instance of UtilisateurJSFBean
*/
public UtilisateurJSFBean() {
}
@EJB
private UtilisateurEJBLocal utilisateurEJB;
...
public String researchForm()
{
resultRecherche = "resultat : ";
List<Utilisateur> res = new ArrayList<Utilisateur>();
res = utilisateurEJB.findUtilisateurByNameAndFName(recherchePrenom, rechercheNom);
for(int i=0;i<res.size();i++)
{
resultRecherche+=((res.get(i))).getNom();
}
resultRecherche+=res.get(0).getNom();
rechercheNom="";
recherchePrenom="";
return "success";
} |
Lors de l'execution de cette fonction (donc quand je valide le formulaire de recherche), j'ai une erreur que je ne parviens à corriger :
Code:
1 2 3 4
|
An Error Occurred:
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to DAO.Utilisateur |
Et dans la stacktrace :
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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
|
javax.faces.el.EvaluationException: java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to DAO.Utilisateur
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
at javax.faces.component.UICommand.broadcast(UICommand.java:315)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1542)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:849)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:746)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1045)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:228)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to DAO.Utilisateur
at Controller.UtilisateurJSFBean.researchForm(UtilisateurJSFBean.java:234)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at javax.el.BeanELResolver.invokeMethod(BeanELResolver.java:779)
at javax.el.BeanELResolver.invoke(BeanELResolver.java:528)
at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:257)
at com.sun.el.parser.AstValue.invoke(AstValue.java:248)
at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:302)
at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:39)
at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
... 32 more |
Je ne parviens pas à résoudre le problème.
Désolé par avance pour la longueur du message, mais c'était pour exposer le contexte le mieux possible.
Merci d'avance pour l'aide que vous voudrez bien m'apporter ...
Cordialement,
Muska17
PS: je tiens à préciser que si je n'accède pas au contenu de resultRecherche avec la boucle, par exemple, mais que je fais un resultRecherche.size() à la place, la valeur est supérieure à 0.