Problemas -> JPA + Hibernate [Resolvido]

8 respostas
O

Galera sou novo no forum e ja venho pedir ajuda… Seguinte, fiz toda a configuração do Hibernate e da JPA pra acessar o Oracle (XE só para teste):

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
    <persistence-unit name="unitGC" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider> 
         <!-- Mapeamento de Classes -->
            <class>com.homelinux.familyone.DAO.acesso</class>
       <properties>
            <!-- properties jdbc -->
            <property name="hibernate.connection.driver_class" value="oracle.jdbc.driver.OracleDriver"/>
            <property name="hibernate.connection.username" value="xxxx"/> 
            <property name="hibernate.connection.password" value="xxxxx"/>  
            <property name="hibernate.connection.url" value="jdbc:oracle:thin:@localhost:1521:XE"/>
            
            <!-- properties hibernate -->
            <property name="hibernate.show_sql" value="false" />
            <property name="hibernate.format_sql" value="false"/>
            <property name="hibernate.use_sql_comments" value="true"/>
            <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
            <property name="hibernate.hbm2ddl.auto" value="create-update" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
          
        </properties>
    </persistence-unit>
</persistence>

Estou usando os Annotations também, essa é a classe q os implementa:

@Entity
@Table(name="acesso")
public class acesso {

    @Id
    private int id;
    
    @Column(nullable=false)
    private String nome;
    
    @Column(nullable=false)
    private String login;
    
    @Column(nullable=false)
    private String password;

    /**
     * @return the nome
     */

    public String getNome() {
        return nome;
    }

    /**
     * @param nome the nome to set
     */
    public void setNome(String nome) {
        this.nome = nome;
    }

    /**
     * @return the login
     */
    public String getLogin() {
        return login;
    }

    /**
     * @param login the login to set
     */
    public void setLogin(String login) {
        this.login = login;
    }

    /**
     * @return the password
     */
    public String getPassword() {
        return password;
    }

    /**
     * @param password the password to set
     */
    public void setPassword(String password) {
        this.password = password;
    }
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

E esse List navega:

public List buscaUsuarios(){
        EntityManager em = getEntityManager();
        String hql = "from acesso";
                 Query query = em.createQuery(hql);
            List result = query.getResultList();
            return result;
)

A principio da tudo certo, ele conecta ao banco mas na hora de trazer os resultados todo vem de forma estranha, parece Hexadecimal:

endereço_do_pacote@7a20807c

Não sei o q está acontecendo…
Gostaria muito da ajuda de vcs

Desde ja obrigado

8 Respostas

Filipe_Chagas

Em que momento aparece esse “hexadecimal” amigão?
Deixa eu tentar adivinhar… você deu um .toString em um objeto dessa lista retornada, certo?
Se eu tiver acertado, acontece o seguinte, o toString, quando você não implementa, traz esse resultado mesmo: Pacote…Classe@endereçoEmMemóriaOuAlgoParecido.
Não sei se deu pra entender, mas tenta implementar o método toStirng na sua classe Acesso e testa novamente.

:wink:

O

Putz, pior que não. Eu fiz um for que pega o tamanho do ArrayList e imprime o valor de acordo com o indice (Bem simplezinho).
Não sei se ele deu pal no meio do caminho mas aqui vai o código.

validador val = new validador();
        for(int i = 0; i < val.buscaUsuarios().size(); i++){
                System.out.println(val.buscaUsuarios().get(i));
        }

Valeu pela atenção.

Filipe_Chagas

Rapaz… quando você faz um get numa collection, ela te retorna uma instância do objeto armazenado - no seu caso uma instância de uma classe Acesso.
Então se você da print na instância de uma classe, sem definir o método que você tá chamando, o java chama o toString.
Então o problema é o que te falei mesmo. Implementa o método toString na classe Acesso e me fala o resultado.

Filipe_Chagas

Só pra melhorar a explicação, o seu código:

validador val = new validador();  
        for(int i = 0; i &lt; val.buscaUsuarios().size(); i++){  
                System.out.println(val.buscaUsuarios().get(i));  
        }

…faz exatamente o seguinte:

validador val = new validador();  
        for(int i = 0; i &lt; val.buscaUsuarios().size(); i++){  
                Acesso ac = (Acesso)val.buscaUsuarios().get(i);
                System.out.println(ac.toString());  //No seu caso, esse toString o java colocou automaticamente, o resultado é o mesmo se tivesse apenas System.out.println(ac);
        }
O

Cara, mas uma vez obrigado pela ajuda, eu fiz de jeito q vc falou a tmb fiz assim:

validador val = new validador();
        for(int i = 0; i < val.buscaUsuarios().size(); i++){
               System.out.println(val.buscaUsuarios().get(i).toString());
       }

Continua na mesma, com esse resultado:
pacote@70eb67e8
pacote@34883357
pacote@7a9300cc
pacote@b07108e
pacote@5a92668c
pacote@56278e83
pacote@10cbd8dc

Valeu pela atenção.

Filipe_Chagas

Sim sim, acho que não expliquei direito. Deixa eu explicar melhor.
Você tem que implementar o método toString na classe Acesso, assim:

public class Acesso(){

   //...ocultado pra poupar tempo

    public String toString(){
        return this.nome; //Aqui você retorna as informações que quer que apareçam no print
    }
}

Sacou agora?

O

Pô cara, melhor q isso só se vc fizesse pra mim.
Deu certinho, muito obrigado.

Filipe_Chagas

Opa, maravilha! Precisando, estamos ae.
Flw :wink:

Criado 28 de março de 2009
Ultima resposta 28 de mar. de 2009
Respostas 8
Participantes 2