Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    203

    exception in query con linguaggio sql

    Ciao a tutti ragazzi ho un problemino nel mio ejb dovrei utilizzare una query in linguaggio sql puro non ejbql in quanto la seconda strada mi da un po di problemi relativi ai dati e alla loro aspplicazione, facendo un po di prove ho capito che nel mio caso il modo giusto è utilizzare linguaggio sql ma adesso mi crea un problema di classCastException.

    Il mio metodo è questo:

    codice:
     
    public List<VRicercaAggrCodMazzetto> findAll() {
            return em.createQuery("select code, siglavideo, frazionario, status, creationDate, scanDate, checkDate, name, id from VRicercaAggrCodMazzetto").getResultList();
        }
    ma quando vado a richiamare dalla jsp il la servlet per visualizzare i dati mi lancia questa eccezione
    codice:
     
    10:01:43,808 INFO  [TomcatDeployment] deploy, ctxPath=/TT-Monitoring-web
    10:02:39,394 ERROR [[jsp]] Servlet.service() for servlet jsp threw exception
    java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to it.poste.tool.persistence.entities.VRicercaAggrCodMazzetto
            at org.apache.jsp.lista_005fcod_005fmazz_jsp._jspService(lista_005fcod_005fmazz_jsp.java:100)
            at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
            at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369)
            at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:322)
            at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:249)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
            at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:638)
            at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:444)
            at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:382)
            at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:310)
            at it.poste.tool.servlet.findall.FindAllCodMazz_srv.processRequest(FindAllCodMazz_srv.java:45)
            at it.poste.tool.servlet.findall.FindAllCodMazz_srv.doGet(FindAllCodMazz_srv.java:62)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
            at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
            at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
            at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
            at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)
            at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
            at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
            at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
            at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
            at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
            at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
            at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
            at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
            at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)
            at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598)
            at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
            at java.lang.Thread.run(Thread.java:619)
    La mia servlet è questa:

    codice:
     
    try {
            List elencoCodMazz = (List) controllerDao.findAllCodMazz();
            Iterator i = elencoCodMazz.iterator();
            request.setAttribute("elencoCodMazz", i);
            request.getRequestDispatcher("/lista_cod_mazz.jsp").forward(request, response);
            }
    come posso risolvere questo problema di cast?
    Lo stesso codice con la query in ejbql non mi restuiva eccezioni
    Vi ringrazio a tutti per l'aiuto

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    203
    Ho fatto delle modifiche:
    codice:
     
     try {
                VRicercaAggrCodMazzetto elencoCodMazz = (VRicercaAggrCodMazzetto) controllerDao.findAllCodMazz();
                List listElenco = List.class.cast(elencoCodMazz);
            Iterator i = listElenco.iterator();
            request.setAttribute("elencoCodMazz", i);
            request.getRequestDispatcher("/lista_cod_mazz.jsp").forward(request, response);
            }
    ma adesso mi dice:

    codice:
     
    10:55:35,866 ERROR [[FindAllCodMazz_srv]] Servlet.service() for servlet FindAllCodMazz_srv threw exception
    java.lang.ClassCastException: java.util.ArrayList cannot be cast to it.poste.tool.persistence.entities.VRicercaAggrCodMazzetto
            at it.poste.tool.servlet.findall.FindAllCodMazz_srv.processRequest(FindAllCodMazz_srv.java:30)
            at it.poste.tool.servlet.findall.FindAllCodMazz_srv.doGet(FindAllCodMazz_srv.java:63)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
            at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
            at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
            at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
            at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)
            at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
            at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
            at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
            at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
            at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
            at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
            at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
            at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
            at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)
            at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598)
            at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
            at java.lang.Thread.run(Thread.java:619)
    come mai con la query ejb non mi lanciava eccezione ed ora con la query in sql mi crea tutto questo casino?
    la gestione dei dati di ritorno non è uguale?

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    633
    a parte il persistence provider TopLink, se passy tramite le librerie standard JPA, dovresti richiamare il metodo createNativeQuery per poter eseguire puro SQL
    ciauz
    Alcuni miei articoli in PRO.HTML.IT: JavaScript | DHTML | DOM
    Sviluppo : wedev | forum

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    203
    Ciao Standard io uso Hibernate come motore di persistenza per gli ejb al posto di toplink che mi dava un bel po di problemi su jboss.
    Comunque utilizzo createNativeQuery ma continua a restituirmi quell'errore e c'è una cosa strana nella query non mi riconosce lo * infatti questo è il mio metodo nel sessionbean

    codice:
     
    public List<VRicercaAggrCodMazzetto> findAll() {
            Query q = em.createNativeQuery("select code, siglavideo, frazionario, status, creation_date, scan_date, check_date, name, id from V_RICERCA_AGGR_COD_MAZZETTO");
            return q.getResultList();
        }
    come mai continua ad andarmi in class cast exception?

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    633
    Non so dove mai ho letto TopLink...vaneggio :P
    Comunque, mi sa che con il tuo codice stai chiedendo troppo alla JVM. Mi spiego: facendo query native stai difatto saltando la mappatura hibernate, quindi non puoi castare i dati "puri" sulle tue entità Hibernate, ma devi scorrerti il tuo resultset, e colonna per colonna, riportarlo sulle proprietà della tua entità.
    Alcuni miei articoli in PRO.HTML.IT: JavaScript | DHTML | DOM
    Sviluppo : wedev | forum

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    203
    cioè?
    Il problema è che praticamente se utilizzo query ejbql l'applicativo mi restituisce delle righe multiple ad esempio:

    pippo
    emo
    pluto
    ciao

    mi restituisce:

    pippo
    pippo
    pippo
    ciao

    direttamente dalla query non so il perchè

    l'unica soluzione che ho trovato è questa.

    Come faccio a scorrermi il resurset??
    Per favore potresti postarmi un esempio di codice?
    grazie mille per la tua disponibilità

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    633
    non mi è chiara la frase:
    Originariamente inviato da n1o
    se utilizzo query ejbql l'applicativo mi restituisce delle righe multiple ...

    mi restituisce:

    pippo
    pippo
    pippo
    ciao
    dato che passando da JPQL (ovvero lo standard JPA) recuperi degli oggetti, mi viene il dubbio che effettivamente sul DB siano presenti righe doppie o che la tua query non includa qualche where-conditions.
    Non mi è capitato di imbattermi in bachi Hibernate per cui venivano restituite record duplicati.
    Alcuni miei articoli in PRO.HTML.IT: JavaScript | DHTML | DOM
    Sviluppo : wedev | forum

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    203
    non so se posso linkare risorse di un altro sito ma ecco la discussione su un altro forum , comunque nel db non sono presenti valori multipli e la query mi restituiva correttamente 100 valori ma se andavo a fare una conversione da List a hashset me ne restituiva 2, cmq se leggi il link capisci meglio

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    633
    A mio avviso l'hashset (non permettendo l'inserimento di chiavi doppie) ti restituisce solo 2 valori, perchè dalla lista escono effettivamente solo 2 valori distinti.
    Quindi il problema è sicuramente nella lista restituita.

    Il post che hai linkato non mi aiuta.
    Il suggerimento che ti do è quello di far visualizzare la query che Hibernate effettivamente fa sul DB (impostando la specifica proprietà).
    Ho come la sensazione che tu stia inconsapevolmente facendo una query del tipo:
    codice:
    select * from TABLE where a = a
    che manda in confusione tutti i db.
    Spero aiuti,
    ciauz
    Alcuni miei articoli in PRO.HTML.IT: JavaScript | DHTML | DOM
    Sviluppo : wedev | forum

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    203
    cioè scusa?

    se io do un

    SELECT * FROM table

    ma non imposto nessun parametro, come è possibile che inserisca il parametro senza che nessuno lo imposti?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.