[RESOLVIDO] Erro casting um objeto de uma List

8 respostas
Gobain

Olá povo,

Meu problema é o seguinte…
Estou tentando tirar um objeto de uma List que recebo após uma consulta usando Hibernate.

O hibernate tá funcionando direitinho, pq quando eu dou load() num objeto só vai sem problemas, mas quando é uma List e tento tirar um objeto de dentro dela e dar cast pra minha classe usuario não vai.

Procurei um bocado pela net, e aparentemente estou fazendo o procedimento certo.

Minha classe que estou tirando do banco é:

package mdl.comuns;

import java.io.Serializable;

public class Usuarios implements Serializable {
	private static final long serialVersionUID = 956756249259406138L;

	private long cod_usuario = 0;
    private int cod_empresa = 0;
    private String nme_usuario = "";
    private String nme_senha = "";
    private String nme_base_dados = "";
    private boolean flg_ativo = false;

    public Usuarios() {
        
    }

    public Usuarios(long cod_usuario, int cod_empresa, String nme_usuario, String nme_senha, String nme_base_dados, boolean flg_ativo) {
        this.cod_usuario = cod_usuario;
        this.cod_empresa = cod_empresa;
        this.nme_usuario = nme_usuario;
        this.nme_senha = nme_senha;
        this.nme_base_dados = nme_base_dados;
        this.flg_ativo = flg_ativo;
        
        System.out.println(toString());
    }

    public long getCod_usuario() {
        return cod_usuario;
    }

    public void setCod_usuario(long cod_usuario) {
        this.cod_usuario = cod_usuario;
    }

    public int getCod_empresa() {
        return cod_empresa;
    }

    public void setCod_empresa(int cod_empresa) {
        this.cod_empresa = cod_empresa;
    }

    public String getNme_usuario() {
        return nme_usuario;
    }

    public void setNme_usuario(String nme_usuario) {
        this.nme_usuario = nme_usuario;
    }

    public String getNme_senha() {
        return nme_senha;
    }

    public void setNme_senha(String nme_senha) {
        this.nme_senha = nme_senha;
    }

    public String getNme_base_dados() {
        return nme_base_dados;
    }

    public void setNme_base_dados(String nme_base_dados) {
        this.nme_base_dados = nme_base_dados;
    }

    public boolean isFlg_ativo() {
        return flg_ativo;
    }

    public void setFlg_ativo(boolean flg_ativo) {
        this.flg_ativo = flg_ativo;
    }

    public String toString() {
        String retorno = (String.valueOf(cod_usuario)+
            " "+String.valueOf(cod_empresa)+
            " "+nme_usuario+
            " "+nme_senha+
            " "+nme_base_dados+
            " "+flg_ativo);
        return retorno;
    }
}

Meu action que está chando a consulta e tentando fazer o cast é:

Query selecao = sessao.getNamedQuery("buscarUsuarioLogin");
        selecao.setString("nome",usuario.getNme_usuario());
        selecao.setString("senha",usuario.getNme_senha());

        List<?> usuariosList = selecao.list();

        if(usuariosList.size() == 1) {
        	usuario = (Usuarios)usuariosList.get(0);
        }

O erro é:

15:46:01,745  WARN RequestProcessor:528 - Unhandled Exception thrown: class java.lang.ClassCastException
10/07/2007 15:46:01 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet action threw exception
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to mdl.comuns.Usuarios
	at mdl.actions.LoginAction.execute(LoginAction.java:42)
	at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
	at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
	at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)

A linha 42 é a linha do cast :smiley:
Alguma idéia?

8 Respostas

F

Poste sua namedQuery buscarUsuarioLogin

Gobain
<sql-query name="buscarUsuarioLogin">
        <![CDATA[SELECT u.cod_usuario,u.cod_empresa,u.nme_usuario,u.nme_senha,u.nme_base_dados,u.flg_ativo FROM usuarios AS u WHERE u.nme_usuario = :nome AND u.nme_senha = :senha]]>
    </sql-query>
Rodrigo_Carvalho_Aul

Essa sua NamedQuery vai retornar uma array de objetos, cada elemento da array com uma informação que você colocou no select.

Se você quiser retornar um objeto Usuario tente assim:

<sql-query name="buscarUsuarioLogin"> <![CDATA[ FROM usuarios AS u WHERE u.nme_usuario = :nome AND u.nme_senha = :senha ]]> </sql-query>
ou

<sql-query name="buscarUsuarioLogin"> <![CDATA[ select u FROM usuarios AS u WHERE u.nme_usuario = :nome AND u.nme_senha = :senha ]]> </sql-query>

[]'s

Rodrigo Auler

F

Tenho pouca experiencia em Hibernate mas acho que você deveria estar retornando o usuario e não as colunas. Alguma coisa como o codigo abaixo.

<sql-query name="buscarUsuarioLogin"> <![CDATA[SELECT u FROM usuarios AS u WHERE u.nme_usuario = :nome AND u.nme_senha = :senha]]> </sql-query>

Gobain

Se usar só o from da esse erro:

10/07/2007 16:17:11 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet action threw exception
org.postgresql.util.PSQLException: ERROR: syntax error at or near "FROM"

Se usar SELECT u FROM da esse:

10/07/2007 16:09:58 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet action threw exception
org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111
F

tente SELECT u FROM Usuarios WHERE XXXX", se não da uma pesquisada na documentação do hibernate.

Gobain

Rodrigo Carvalho Auler:
Essa sua NamedQuery vai retornar uma array de objetos, cada elemento da array com uma informação que você colocou no select.

Realmente! Eu peguei o objeto que retorna e conferi se era um array e… voilá!!!

Valeu pela ajuda pessoal!

root_

AMIGO… FAÇA O SEGUINTE:

Query selecao = sessao.getNamedQuery("buscarUsuarioLogin");
        selecao.setString("nome",usuario.getNme_usuario());
        selecao.setString("senha",usuario.getNme_senha());

       //desssa forma
       List<Usuarios> usuariosList = selecao.list();

        if(usuariosList.size() == 1)
        	usuario = usuariosList.get(0);

Espero q dê certo!!!

Criado 10 de julho de 2007
Ultima resposta 18 de set. de 2008
Respostas 8
Participantes 4