Iniciando em Hibernate: "Unknown entity" [RESOLVIDO]

Você definiu a classe no hibernate.cfg.xml ?

Arquivo xml apenas o “.hbm.xml”.
Além desse, fiz o arquivo de configuração “hibernate.properties”.
Apenas esses dois.

Como está o seu xml??

Parece não estar encontrando o mapeamento dentro do

Arquivo Tarifa.hbm.xml

[code]<?xml version="1.0"?>

[/code]

Sua classe Tarifa está dentro de algum pacote? Se sim, você tem que definir o caminho completo da classe no arquivo <Nomedaclasse>.hbm.xml dentro da tag class name

Exemplo

<class name="br.com.guj.beans.Tarifa" table.....>

1 curtida

[quote=ManchesteR]Sua classe Tarifa está dentro de algum pacote? Se sim, você tem que definir o caminho completo da classe no arquivo <Nomedaclasse>.hbm.xml dentro da tag <class name.

Exemplo

><class name="br.com.guj.beans.Tarifa" table.....

nao… nenhuma classe está dentro de pacote algum.

Como está o seu DAO? na verdade, como você está iniciando o SessionFactory?

Outra coisa, eu aconselho você a usar apenas o arquivo hibernate.cfg.xml ao invés do hibernate.properties e Annotations ao invés dos arquivos .hbm.xml.

DAO:

[code]import org.hibernate.*;
import org.hibernate.cfg.Configuration;
import java.util.List;
import java.util.Properties;
import java.io.FileInputStream;
import java.util.Date;

public class TarifaDAO{
private SessionFactory factory;
public TarifaDAO() throws Exception{
Configuration cfg = new Configuration();
Properties props = new Properties();
props.load(new FileInputStream(“hibernate.properties”));
cfg.setProperties(props);
cfg.addClass(Tarifa.class);
factory = cfg.buildSessionFactory();
}
public void insert(Tarifa t) throws Exception{
Session session = factory.openSession();
session.save(t);
session.flush();
session.close();
}
public java.util.List getList(String condicao) throws Exception{
Session session = factory.openSession();
Criteria select = session.createCriteria(condicao);
List tarifas = select.list();
session.flush();
session.close();
return tarifas;
}
public Tarifa retrieve(int pk) throws Exception{
Session session = factory.openSession();
Tarifa t = (Tarifa)session.load(Tarifa.class, pk);
session.flush();
session.close();
return t;
}
public void delete(Tarifa t) throws Exception{
Session session = factory.openSession();
session.delete(t);
session.flush();
session.close();
}
}[/code]

vou dar uma olhada em como usar Annotations. Obrigado.

colocando as confs do banco no hibernate.cfg.xml o programa não consegue nem conectar ao banco:

<hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://localhost/minhaconta</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">root</property> <property name="hibernate.connection.pool_size">10</property> <property name="show_sql">true</property> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <property name="hibernate.hbm2ddl.auto">update</property> <!-- Arquivos de mapeamento --> <mapping resource="Tarifa.hbm.xml" /> </session-factory> </hibernate-configuration>

erro: org.hibernate.HibernateException: database product name cannot be null

Ola Rissato, seu arquivo hibernate.cfg.xml está errado.

Olha um exemplo certo

&lt?xml version='1.0' encoding='utf-8'?&gt
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <!-- Database connection settings -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost/hibernate_annotations</property>
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="connection.username">root</property>
        <property name="connection.password">password</property>
        <!-- Mapping -->
        <mapping class="hibernate.beans.Customers"/>        
    </session-factory>   
</hibernate-configuration>

Note que dentro das tags, nao tem hibernate.connnection e sim apenas connection.

Se você for usar Annotations, repara que o modo de iniciar o SessionFactory é diferente, exemplo:

SessionFactory factory = new AnnotationConfiguration().configure().buildSessionFactory();

eu estou tentando configurar o hibernate sem annotations por enquanto. Mas o famoso “unknown entity” insiste em me perturbar. Eu estou adicionando a classe usando “cfg.addClass(Tarifa.class);” e também no arquivo “hibernate.cfg.xml” e nada faz o bendito ser mapeado.

nos tutorias eu li que o arquivo hibernate.cfg.xml é carregado automaticamente. Isso está certo? Como eu faço pra carregar ele explicitamente. Pq meu palpite é que ele nao está sendo carregado. Obrigado.

Qual o nome do seu bean? é apenas Tarifa mesmo?
pergunta besta mas vamo tenta ueh!

flw.

agora ficou até engraçado: Se eu insiro a linha “cfg.addClass(Tarifa.class);” o erro é o seguinte:

org.hibernate.MappingException: Error reading resource: Tarifa.hbm.xml at org.hibernate.cfg.Configuration.addClass(Configuration.java:471) at TarifaDAO.<init>(TarifaDAO.java:15) at TesteHib.main(TesteHib.java:10) Caused by: org.hibernate.MappingException: duplicate import: Tarifa

Se eu retiro a linha (supondo que a classe Tarifa já foi mapeada) o erro é o seguinte:

org.hibernate.MappingException: Unknown entity: from Tarifa at org.hibernate.impl.SessionFactoryImpl.getEntityPersister(SessionFacto ryImpl.java:569) at org.hibernate.impl.SessionImpl.getOuterJoinLoadable(SessionImpl.java: 1337) at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1303) at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:300) at TarifaDAO.getList(TarifaDAO.java:27) at TesteHib.main(TesteHib.java:11) Press any key to continue...

jah tiro o mapeamento do hibernate_cfg.xml pra ve o erro q dá?
digo, deixar apenas o cfg.addClass(Tarifa.class)
ta até engraçado esse erro hehehe.

flw.

ja testei… se tirar o mapeamento do hibernate.cfg.xml da problema na hora de parsear. o parser sente falta da tag e reclama:

[code]org.hibernate.HibernateException: problem parsing configurationhibernate.cfg.xml

    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1173)
    at org.hibernate.cfg.Configuration.configure(Configuration.java:1112)
    at TarifaDAO.<init>(TarifaDAO.java:11)
    at TesteHib.main(TesteHib.java:10)

Caused by: org.hibernate.MappingException: invalid configuration
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1169)
… 3 more
Caused by: org.xml.sax.SAXParseException: The content of element type “session-f
actory” is incomplete, it must match “(property*,mapping+,(class-cache|collectio
n-cache|jcs-class-cache|jcs-collection-cache)*)”.[/code]

Consegui fazer o hibernate funcionar. O problema era que o arquivo hibernate.cfg.xml precisa ficar na mesma pasta do hibernate3.jar.

Olá tive o memso problema e resolvi alterando minha classe de entidade;

removi -> import org.hibernate.annotations.Entity;
acrescentei -> import javax.persistence.Entity;

resolveu meu problema…

1 curtida

jfeliperc …cara, estava com o mesmo problema aqui, e a troca dos imports resolveu tmbm vlws…