Consulta no Hibernate

9 respostas
javer

Por que será que dá exceção dizendo que a tabela (tabela usuario) não está mapeada no Hibernate (versão 3.2.1) se ela está mapeada?

Exceção quando faz a Query:
usuario is not mapped [From usuario]

hibernate.reveng.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-reverse-engineering PUBLIC "-//Hibernate/Hibernate Reverse Engineering DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-reverse-engineering-3.0.dtd">
<hibernate-reverse-engineering>
  <schema-selection match-catalog="transport"/>
  <table-filter match-name="clientes"/>
  <table-filter match-name="endereco"/>
  <table-filter match-name="usuario"/>
</hibernate-reverse-engineering>
Usuario.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="transys.pojo.Usuario" table="usuario" catalog="transport">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="identity" />
        </id>
        <property name="login" type="string">
            <column name="login" length="20" />
        </property>
        <property name="senha" type="string">
            <column name="senha" length="100" />
        </property>
        <property name="nomeReal" type="string">
            <column name="nome_real" length="50" />
        </property>
        <property name="email" type="string">
            <column name="email" length="150" />
        </property>
        <property name="nivel" type="java.lang.Short">
            <column name="nivel" />
        </property>
    </class>
</hibernate-mapping>
hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/transport</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password">SENHA</property>
    <property name="hibernate.show_sql">true</property>
    <property name="hibernate.current_session_context_class">thread</property>
    <mapping resource="transys/pojo/Clientes.hbm.xml"/>
    <mapping resource="transys/pojo/Usuario.hbm.xml"/>
    <mapping resource="transys/pojo/Endereco.hbm.xml"/>
  </session-factory>
</hibernate-configuration>
Código onde faz a consulta para gerar uma lista de Option, onde dá o erro e não carrega os dois usuários cadastrados, esse método está no SessionBean1.java e é chamado no método init():
private void buildUsuarioOptions() {
    List<Usuario> usuarioList = null;
    try {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        org.hibernate.Transaction tx = session.beginTransaction();
        org.hibernate.Query q = session.createQuery("From usuario");
        //org.hibernate.Query q = session.createSQLQuery("SELECT * FROM usuario");
        usuarioList = (List<Usuario>) q.list();
    } catch (Exception e) {
        info("Erro: "+e.getMessage());
        e.printStackTrace();
    }

    this.listaUsuarioOptions = new Option[usuarioList.size()];
    int i = 0;
    for (Usuario item : usuarioList) {
        info("Usuario: "+item.getLogin());
        Option opt = new Option(item.getId(), item.getLogin());
        this.listaUsuarioOptions[i++] = opt;
    }
}

Alguém saberia me dar uma dica do que estou fazendo errado? Estou iniciando em Hibernate e achava que estava tudo certo mas esta dando esse erro.

Obrigado.

9 Respostas

kokol_fmt

javer:
Exceção quando faz a Query:
usuario is not mapped [From usuario]

Código onde faz a consulta para gerar uma lista de Option, onde dá o erro e não carrega os dois usuários cadastrados, esse método está no SessionBean1.java e é chamado no método init():

org.hibernate.Query q = session.createQuery("From usuario");

Tenta from Usuario … eu também estou começando no Hibernate e pelo que li, você utiliza a classe Usuario, nao a tabela usuario

F

Bom dia,

Quando vc cria “from usuario”, vc esta pensando em banco de dados, comum para qualquer desenvolvimento iniciante em hql.

Como esta o nome da sua classe “Usuario”, como em hql trabalhamos com objetos se você passar para “from Usuario” provavelmente terá seu resultado.

Qq dúvida estou a disposição.

Att.;

javer

Obrigado a todos.

Tentei assim e agora deu mensagem diferente:

List<Usuario> usuarioList = null; Session session = HibernateUtil.getSessionFactory().getCurrentSession(); try { //org.hibernate.Transaction tx = session.beginTransaction(); //org.hibernate.Query q = session.createQuery("from transys.pojo.Usuario"); //org.hibernate.Query q = session.createSQLQuery("SELECT * FROM usuario"); //usuarioList = session.createQuery("from transys.pojo.Usuario").list(); usuarioList = session.createQuery("from Usuario").list(); } catch (Exception e) { info("Erro gerando a lista: " + e.getMessage()); e.printStackTrace(); }

Mensagem de erro:
createQuery is not valid without active transaction
Como resolve isso?

Só confirmando, para usar o SQL normal eu uso session.createSQLQuery?

B

“createQuery is not valid without active transaction”

Caramba, é só ler o erro né. Descomenta a linha onde você instancia uma transação.

javer

Ok, obrigado novamente.

Agora tenho um outro problema, no meu DAO tenho esse método:

public Usuario busca(Integer id) { org.hibernate.Transaction tx = session.beginTransaction(); tx.begin(); Usuario usuario = (Usuario) this.session.load(Usuario.class, id); tx.commit(); return usuario; }

… que está disparando essa exceção:
could not initialize proxy - no Session

O que está errado? Quero passar o id do usuário e recuperar um usuário.

Lavieri

Acho q o problema é q vc esta tentando fazer de ponta cabeça…

javer

Você quis dizer de cabeça para baixo (up side down), a imagem é irrelevante nesse caso, infelizmente não é isso não.

Lavieri

ahuahuahua num é q se trocou desvirou o avatar ?? agora so falta desvirar o método…

o ponta cabeça, é que preimeiro vc tenta rodar, ai depois vc le a saida do problema de configuração, ai vc configura, e tenta rodar denovo, e assim vai… ou seja… ta fazendo de ponta cabeça, de traz pra frente…

O.o

mais uma duvida… pq vc abre tranzação pra fazer select ??

bom, o erro não ta completo, e pode ser N coisas, um stacktrace as vezes ajuda…

javer

Já resolvi, coloquei o lazy=“false” no mapeamento e resolveu.

Criado 23 de abril de 2009
Ultima resposta 23 de abr. de 2009
Respostas 9
Participantes 5