Hibernate + Unknown Entity

30 respostas
AlencarCanton

E ae!
galera,to tendo problemas aqui no o hibernate.Meu mapeamento sempre funcionou direitinho e tal,agora toda tabela q eu mapeio não funciona,recebo este erro:

Exception in thread "AWT-EventQueue-0" org.hibernate.MappingException: Unknown entity: Modelos.ControleCaixa
	at org.hibernate.impl.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:693)
	at org.hibernate.impl.SessionImpl.getEntityPersister(SessionImpl.java:1485)
	at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:120)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
	at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
	at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
	at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:713)
	at org.hibernate.impl.SessionImpl.save(SessionImpl.java:701)
	at org.hibernate.impl.SessionImpl.save(SessionImpl.java:697)
	at DAO.ControleCaixaDAO.insere(ControleCaixaDAO.java:29)
	at Interface.Cadastro.CadastrarControleCaixa.btSalvarActionPerformed(CadastrarControleCaixa.java:227)
	at Interface.Cadastro.CadastrarControleCaixa.access$000(CadastrarControleCaixa.java:26)
	at Interface.Cadastro.CadastrarControleCaixa$1.actionPerformed(CadastrarControleCaixa.java:92)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
	at java.awt.Component.processMouseEvent(Component.java:6289)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
	at java.awt.Component.processEvent(Component.java:6054)
	at java.awt.Container.processEvent(Container.java:2041)
	at java.awt.Component.dispatchEventImpl(Component.java:4652)
	at java.awt.Container.dispatchEventImpl(Container.java:2099)
	at java.awt.Component.dispatchEvent(Component.java:4482)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
	at java.awt.Container.dispatchEventImpl(Container.java:2085)
	at java.awt.Window.dispatchEventImpl(Window.java:2478)
	at java.awt.Component.dispatchEvent(Component.java:4482)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:644)
	at java.awt.EventQueue.access$000(EventQueue.java:85)
	at java.awt.EventQueue$1.run(EventQueue.java:603)
	at java.awt.EventQueue$1.run(EventQueue.java:601)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
	at java.awt.EventQueue$2.run(EventQueue.java:617)
	at java.awt.EventQueue$2.run(EventQueue.java:615)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:614)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Segue meu mapeamento na classe modelo:
@Entity
@Table(name="controle_caixa")
public class ControleCaixa {
    @Id@GeneratedValue
    private long id;
    @Temporal(TemporalType.DATE)
    private java.util.Date Data;
    private float valor;
    private String tipo;
    private String motivo;
Segue a estrutura da tabela:
DROP TABLE IF EXISTS `paulobaterias`.`controle_caixa`;
CREATE TABLE  `paulobaterias`.`controle_caixa` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `tipo` varchar(9) DEFAULT NULL,
  `valor` float DEFAULT NULL,
  `data` date DEFAULT NULL,
  `motivo` varchar(80) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

E por último,meu arquivo xml:

<?xml version="1.0" encoding="UTF-8"?> 
 
     <!DOCTYPE hibernate-configuration PUBLIC  
            "-//Hibernate/Hibernate Configuration DTD//EN"  
            "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  

<!--
    Document   : hibernate.cfg.xml
    Created on : 1 de Setembro de 2011, 12:13
    Author     : Alencar
    Description:
        Purpose of the document follows.
-->

<hibernate-configuration>
	<session-factory>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password"></property>
		<property name="hibernate.connection.url">jdbc:mysql://localhost/paulobaterias</property>
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="hibernate.connection.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
		<property name="hibernate.hbm22ddl.auto">true</property>
		<property name="show_sql">true</property>
		<property name="format_sql">true</property>
                <property name="hibernate.show_sql">true</property> 
                <mapping class="Modelos.EstoqueSucata" />
                <mapping class="Modelos.Lucro" />
                <mapping class="Modelos.Cliente" />
                <mapping class="Modelos.Estoque" />
                <mapping class="Modelos.Recarga" />
                <mapping class="Modelos.Venda" />
                <mapping class="Modelos.Sucata" />
                <mapping class="Modelos.Bateria" />
                <mapping class="Modelos.Fornecedor" />
                <mapping class="Modelos.Pedido" />
                <mapping class="Modelos.RepositorioPedidos" />
                <mapping class="Modelos.RepositorioVendas" />
                <mapping class="Modelos.EntradaEstoque" />
                <mapping class="Modelos.ControleCaixa" />
        </session-factory>
</hibernate-configuration>

É isso,alguem pode me ajudar?pq será q estou tendo esse problema?outra tabela que criei recentemente eu tive o mesmo problema..
vlw pela atenção!

30 Respostas

esdras_63

Isso já aconteceu comigo. Poste os imports da página, talvez você possa estar importando de pacotes errados. Tente copiar os imports de outra classe que esteja funcionando.

AlencarCanton

os imports de qual classe?

esdras_63

Da sua entidade que está dando erro.

AlencarCanton
package Modelos;

import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

ta aí,mas eu uso esses mesmos imports para outras entidades que estão funcionando normal.. =/

esdras_63
AlencarCanton:
package Modelos;

import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

ta aí,mas eu uso esses mesmos imports para outras entidades que estão funcionando normal.. =/


Cara que estranho. Os imports parecem estar corretos e o mapeamento também. =(

AlencarCanton

velho,isso ta me tirando o sono…
ja vasculhei tudo,e nao acho o pq de não identificar a tabela…acho que o erro deve estar no xml,qualquer espaço errado compromete o arquivo do xml,não é?tá foda…
mas valeu mesmo pela força aí,brother!
alguem mais pode dar uma olhada nos códigos?

esdras_63

Essa propriedade não está errada?
O certo não seria:

<property name="hibernate.hbm2ddl.auto">update</property>

Com um 2 a menos e passando update para ele atualizar as tabelas automaticamente.

AlencarCanton

alterei dessa forma,e recebi o mesmo erro… =/

esdras_63

Esses dois possuem um hibernate antes:

<property name="hibernate.show_sql">true</property>  
<property name="hibernate.format_sql">true</property>
MGSAHAO

Cara vc não tem que passar a porta do banco ?

jdbc:mysql://localhost/paulobaterias

se não me engano a porta do mysql é 3306 ficaria assim

jdbc:mysql://localhost:3306/paulobaterias

AlencarCanton

alterei aqui,mas continua dando o mesmo erro…
essas linhas parece que funcionam sem o ‘hibernate.’ antes,pq sempre mostrou as querys tudo certinho…
mais alguma coisa?

B

Você tem duas declarações da propriedade “SHOW_SQL” no seu hibernate.cfg.xml…

E achei outra coisa, que não sei se tem problema, mas no atributo “id” da entidade, as anotações estão sem espaço entre elas. Está assim “@Id@GeneratedValue”… Não tem que ter espaço não? Nunca testei pra saber se tem problema, é só um chute =P

AlencarCanton

@MGSAHAO
coloquei a porta do banco e continua com o mesmo erro de mapeamento…mas a conexao funcionava normal sem colocar a porta

@bob_sponja
tirei um "SHOW_SQL’ e não funcionou.
Sim,funciona as duas anotações sem ter espaço.

=/

MGSAHAO

funcionava normal ? a partir de que momento parou de funcionar ?

AlencarCanton

funcionava normal…fazia um tempinho que nao criava uma tabela,precisei criar,então fiz o mapeamento tudo certinho,tudo da forma como eu sempre fiz,e simplismente não identificava a tabela,criei outra tabela e continua dando o mesmo erro…até pensei de o número de tabelas no .xml ser limitado,mas fiz alguns testes retirando algumas linhas de mapeamento do .xml e nada…

MGSAHAO

Cara vc cria tabela com espaço ? bom eu nunca fiz isso, mais se o create funciono deve funcionar…
o que eu posso te dizer é para testar sua conexão, faz alguma coisa com Statement e ResultSet só para testar…

drsmachado

Camarada, não tem nada a ver com espaço, repetição de propriedades no xml ou coisas assim.
Por algum motivo, o mapeamento da classe não está coincidindo com o local em que ela é colocada quando o projeto é empacotado.

Caso fosse qualquer das outras “esotéricas” tentativas, o erro não seria este.

M

esse erro ocore logo quando voce inicia a aplicação?

posta seu dao pra gente da uma olhada

AlencarCanton

@michelorth_
o erro rola qndo eu vou inserir um objeto no banco,
segue o DAO,mas é o mesmo que eu uso pra todas as outras tabelas e funciona nelas:

public void insere(ControleCaixa cc) throws HibernateException { org.hibernate.Transaction tx = session.beginTransaction(); session.save(cc); tx.commit(); }

@MGSAHAO
a conexao ta normal porque inserção em outras tabelas funciona normalmente…

M

carra voce ta passando o objeto controleCaixa como parametro qndo voce chama este metodo[url]?

AlencarCanton

aham,to sim

ControleCaixa cc = criaControleCaixaBean(); ControleCaixaDAO ccd = new ControleCaixaDAO(); ccd.insere(cc);

MGSAHAO

Cara não ta faltando um implements Serializable na tua classe ControleCaixa ?

AlencarCanton

nao cara…ja tentei,mas continua com o mesmo erro…

ganondorfan

Você mapeou esta sua classe no Persistence.xml ? Acho que o Hibernate precisa disso para identificar as entidades persistíveis não?
Posta teu Persistence.xml aí.

MGSAHAO

Cara o que que vc ta usando ? Servidor de aplicação ? tomcat, jboss, glassfish ?
tu não deve ta fazendo deploy direito dessa aplicação!

AlencarCanton

@MGSAHAO
cara eu uso o xampp como servidor sql,mas sempre usei e funcionou tudo,não sei o que tá acontecendo…

@ganondorfan
ja postei no primeiro post do topico o Hibernate.xml
tá certo lá n sei qq ta rolando,confere aí

drsmachado

Faz o seguinte, camarada.
Não sei em que momento você cria a session, mas, ao fazer isso, o stackTrace faz uma listagem de todas as entidades mapeadas.
Posta este stackTrace para conferirmos se esta entidade aparece ali.

INFO: updating schema
11/01/2012 11:36:03 org.hibernate.tool.hbm2ddl.TableMetadata <init>
INFO: table found: JPA.AUTOR_LIVRO //aqui
11/01/2012 11:36:03 org.hibernate.tool.hbm2ddl.TableMetadata <init>
INFO: columns: [livro_id, autor_id]
11/01/2012 11:36:03 org.hibernate.tool.hbm2ddl.TableMetadata <init>
INFO: foreign keys: [fk80a363fa15921e1f, fk80a363fa159c753f]
11/01/2012 11:36:03 org.hibernate.tool.hbm2ddl.TableMetadata <init>
INFO: indexes: []
11/01/2012 11:36:03 org.hibernate.tool.hbm2ddl.TableMetadata <init>
INFO: table found: JPA.AUTORES //aqui
11/01/2012 11:36:03 org.hibernate.tool.hbm2ddl.TableMetadata <init>
INFO: columns: [id, nome]
11/01/2012 11:36:03 org.hibernate.tool.hbm2ddl.TableMetadata <init>
INFO: foreign keys: []
11/01/2012 11:36:03 org.hibernate.tool.hbm2ddl.TableMetadata <init>
INFO: indexes: [sys_c004114]
11/01/2012 11:36:03 org.hibernate.tool.hbm2ddl.TableMetadata <init>
INFO: table found: JPA.LIVROS //aqui
11/01/2012 11:36:03 org.hibernate.tool.hbm2ddl.TableMetadata <init>
AlencarCanton

@drsmachado
beleza cara?
olha,essa é minha classe que cria as sessions:

public class CriadorDeSessions {
    
        public static Session getSession() throws HibernateException {
        // TODO code application logic here
        AnnotationConfiguration configuration = new AnnotationConfiguration();
        configuration.configure();
        SessionFactory factory = configuration.buildSessionFactory();
        Session session = factory.openSession();
        return session;
    }
    
}

não sei onde ele faz a listagem,nem como imprimir ela na tela,como eu faço? =/

AlencarCanton

galera,
começou a dar outro problema do nada em uma classe,elacionado à um método que lista todos os objetos de uma tabela,e isso aconteceu sozinho…aí lembrei que um amigo me disse pra limpar e construir quando houvesse algum problema do nada,eu limpei e construí,acabou resolvendo os dois problemas!
não sei o que pode ter sido,mas isso resolveu.
muito obrigado pela atenção de todo mundo que se dispôs a me ajudar aqui!
abraço!

MGSAHAO

Foi o que eu te disse, vc criou um classe e não compilou o projeto, logo o seu deploy era o antigo, onde não existia a classe ControleCaixa, por isso dava o primeiro erro!

Criado 9 de janeiro de 2012
Ultima resposta 11 de jan. de 2012
Respostas 30
Participantes 7