Errore Cast

di il
10 risposte

Errore Cast

Ho il seguente codice:

public Object getById(String id) throws Exception {
		UtnUtente obj = null;
		try {
			Query q = em.createNativeQuery(SELECT_BY_ID);
			q.setParameter(1, id);
			Object ogg = null;
			List<Object[]> oggetti = q.getResultList();
			if(oggetti.size()>0) ogg = oggetti.get(0);
			if(ogg!=null) {
				obj = new UtnUtente();
				obj.setIdUtente(id);
				obj.setDtAgg((String) ogg);
				String idRuolo = impRelRuoloUtenteRepository.getRuoloByUtente(id);
			    obj.setIdRuolo(idRuolo); //viene richiamto l'oggetto errore cast 
			}
	
		} catch (Exception e) {
			logger.error(e.getMessage());
			throw e;
		}
		return obj;
	}

L'errore che mi restituisce è il seguente:
ID:371 java.math.BigDecimal cannot be cast to [Ljava.lang.Object;"
String idRuolo = impRelRuoloUtenteRepository.getRuoloByUtente(id);

come posso fare che deve accettare un BigDecimal ma non un oggetto?

Ho provato in questo modo, ma non funziona:

	String idRuolo = String.valueOf(impRelRuoloUtenteRepository.getRuoloByUtente(id));
			    obj.setIdRuolo(idRuolo); //viene richiamto l'oggetto errore cast 
			}

10 Risposte

  • Re: Errore Cast

    imparareJava ha scritto:


    L'errore che mi restituisce è il seguente:
    ID:371 java.math.BigDecimal cannot be cast to [Ljava.lang.Object;"
    String idRuolo = impRelRuoloUtenteRepository.getRuoloByUtente(id);
    Non è molto chiaro .... se il problema è in getRuoloByUtente, allora mostra getRuoloByUtente.
  • Re: Errore Cast

    
    public  String getRuoloByUtente(String idUtente) throws Exception {
    		String result = "";
    		try {
    			Query q = em.createNativeQuery(SELECT_RUOLO_BY_UTENTE);
    			q.setParameter(1, idUtente);
    			Object[] ogg = null;
    			List<Object[]> oggetti = q.getResultList();
    			if(oggetti.size()>0) ogg = oggetti.get(0);
    			if(ogg!=null) {
    				if (!IsNull.thenBlank((String) ogg[0]).equals("")) {
    					result = (String) ogg[0];
    				}
    			}
    		} catch (Exception e) {
    			logger.error(e.getMessage());
    			throw e;
    		}
    		return result;
    	}
    
    
  • Re: Errore Cast

    imparareJava ha scritto:


    
    			List<Object[]> oggetti = q.getResultList();
    
    Verifica bene (in debugging!) cosa contiene questo oggetti. E' veramente una lista di ARRAY di oggetti?
  • Re: Errore Cast

    Mi restituisce un solo valore ArrayList.
    id --> BigDecimal
  • Re: Errore Cast

    @andbin: ATTENTO, il problema e' il CAST. L'assegnamento SALTA!

    @imparareJava: ATTENTO!!!

    1) "List<Object[]>" e' UNA LISTA DI VETTORI CHE CONTENGONO Object""

    2) q.getResultList() ritorna una LISTA DI BigDecimal (immagino, almeno dall'errore che hai indicato)

    NON E' POSSIBILE fare il seguente cast:
    
    	List<BigDecimal> -> List<Object[]>
    
    I due tipo di dati NON SONO COMPATIBILI.
  • Re: Errore Cast

    Come posso risolvere?
  • Re: Errore Cast

    Stai facendo una domanda del tipo:

    ho dipinto una parete di rosso, ma la volevo bianca. Come posso risolvere?

    Devi assicurarti che i TIPI di dato che passi da una parte all'altra della tua applicazione ABBIANO SENSO e siano CONSISTENTI con il contenuto del database.

    Potresti fare delle CONVERSIONI, ma questo lo DEVI valutare TU!

    In generale, quando si devono fare delle conversioni, nel 99.9999% si sta' sbagliando qualcosa. Ma QUESTO lo puoi sapere SOLO TU.

    SE non lo sai, VUOL DIRE che non hai chiaro il problema che stai cercando di risolvere.
  • Re: Errore Cast

    La conversione devo fare solo l'attributo id, come posso convertire?
  • Re: Errore Cast

    migliorabile ha scritto:


    @andbin: ATTENTO, il problema e' il CAST. L'assegnamento SALTA!
    Sì .. lo so, l'avevo capito .. (ovviamente)

    E il problema è sicuramente

    List<Object[]> oggetti = q.getResultList();
    ogg = oggetti.get(0); // <---------- QUI

    Perché a runtime le parametrizzazioni non "esistono", quindi l'unica cosa che conta è che getResultList restituisca qualcosa che è-un List (es. ArrayList).

    Quel getResultList() restituisce un List NON parametrizzato (il raw-type insomma) e assegnarlo ad un List<Object[]> è lecito, salvo un warning di "unchecked" conversion (è un warning! non un errore).

    Il problema è (sicuramente) nella riga del get(0) perché la lista è parametrizzata e il compilatore infila un cast implicito a Object[], quindi diventa:

    ogg = (Object[]) oggetti.get(0);

    Ma se il primo oggetto della lista è un BigDecimal, allora è OVVIO che NON può essere convertito in nessun modo ad un Object[], quindi il cast FALLISCE.

    Morale: la lista è (presumo) da vedere come List<BigDecimal>
  • Re: Errore Cast

    Va bene. Grazie
Devi accedere o registrarti per scrivere nel forum
10 risposte