Hibernate - Unknown entity [RESOLVIDO]

8 respostas
M

Galera estou iniciando no Hibernate e gostaria da ajuda de vocês.
Estou usando Hibernate 3.6 com annotations.

O erro é o seguinte:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Exception in thread "main" org.hibernate.MappingException: Unknown entity: br.com.ciadamemoria.Pessoa
	at org.hibernate.impl.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:691)
	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 br.com.ciadamemoria.Test.main(Test.java:23)

Meu POJO com annotation esta assim:

package br.com.ciadamemoria;

import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

import org.hibernate.annotations.Entity;

@Entity
public class Pessoa {
		
		@Id
		@GeneratedValue(strategy = GenerationType.SEQUENCE)
		private Long id;;
		private String name;

		public Pessoa() {		
		}
		
		public Pessoa(String name) {
			setName(name);
		}
		
		public Long getId() {
			return id;
		}

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

		public String getName() {
			return name;
		}

		public void setName(String name) {
			this.name = name;
		}

		@Override
		public int hashCode() {
			final int prime = 31;
			int result = 1;
			result = prime * result + (int) (id ^ (id >>> 32));
			return result;
		}

		@Override
		public boolean equals(Object obj) {
			if (this == obj)
				return true;
			if (obj == null)
				return false;
			if (getClass() != obj.getClass())
				return false;
			Pessoa other = (Pessoa) obj;
			if (id != other.id)
				return false;
			return true;
		}
}

A classe main:

package br.com.ciadamemoria;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import br.com.ciadamemoria.Pessoa;

public class Test {

	public static void main(String[] args) {
		Configuration cfg = new Configuration();
		cfg.configure("/hibernate.cfg.xml");
		cfg.addAnnotatedClass(Pessoa.class);
		SessionFactory sf = cfg.buildSessionFactory();
		Session session = sf.openSession();
		Transaction tx = session.beginTransaction();
		
		Pessoa p = new Pessoa("Marcos");
		
		session.save(p);
		tx.commit();
		session.close();
		
		System.out.println("Fim");
		
	}
}

O meu hibernate.cfg.xml

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
	<session-factory>
      <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
      <property name="hibernate.connection.url">jdbc:mysql://localhost/test</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="hbm2ddl.auto">create</property>
      <mapping class="br.com.ciadamemoria.Pessoa" />
	</session-factory>
</hibernate-configuration>

Obrigado.

8 Respostas

M

Olá pessoal,
esse erro eu resolvi alterado os imports da minha Entity

removido: import org.hibernate.annotations.Entity;
incluso: import javax.persistence.Entity;

encontrei a solução aqui no fórum mesmo. Porem agora estou com o seguinte erro:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Exception in thread "main" org.hibernate.MappingException: Could not instantiate id generator [entity-name=br.com.ciadamemoria.Pessoa]
	at org.hibernate.id.factory.DefaultIdentifierGeneratorFactory.createIdentifierGenerator(DefaultIdentifierGeneratorFactory.java:118)
	at org.hibernate.mapping.SimpleValue.createIdentifierGenerator(SimpleValue.java:193)
	at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:246)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1842)
	at br.com.ciadamemoria.Test.main(Test.java:25)
Caused by: org.hibernate.MappingException: Dialect does not support sequences
	at org.hibernate.dialect.Dialect.getSequenceNextValString(Dialect.java:554)
	at org.hibernate.id.SequenceGenerator.configure(SequenceGenerator.java:101)
	at org.hibernate.id.SequenceHiLoGenerator.configure(SequenceHiLoGenerator.java:60)
	at org.hibernate.id.factory.DefaultIdentifierGeneratorFactory.createIdentifierGenerator(DefaultIdentifierGeneratorFactory.java:111)
	... 4 more
M

Também resolvi este, procurando aqui no guj.

Na minha Entity alterei onde diz GenerationType.SEQUENCE para GenerationType.IDENTITY

@Id 
@GeneratedValue(strategy = GenerationType.SEQUENCE)

Identity - Mapeado para colunas identity no DB2, MySQL, MSSQL, Sybase, HSQLDM, Infomix.
Sequence - Mapeado em seqüências no DB2, PostgreSQL, Oracle, SAP DB, irebird (ou generator no Interbase).

M

Isso pode ser um guia útil para iniciantes… kkk
Agora o erro gerado é este.

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Exception in thread "main" org.hibernate.HibernateException: Unable to instantiate default tuplizer [org.hibernate.tuple.entity.PojoEntityTuplizer]
	at org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer(EntityTuplizerFactory.java:108)
	at org.hibernate.tuple.entity.EntityTuplizerFactory.constructDefaultTuplizer(EntityTuplizerFactory.java:133)
	at org.hibernate.tuple.entity.EntityEntityModeToTuplizerMapping.<init>(EntityEntityModeToTuplizerMapping.java:80)
	at org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:322)
	at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:473)
	at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:133)
	at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:84)
	at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:284)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1842)
	at br.com.ciadamemoria.Test.main(Test.java:25)
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer(EntityTuplizerFactory.java:105)
	... 9 more
Caused by: java.lang.NoClassDefFoundError: javassist/util/proxy/MethodFilter
	at org.hibernate.bytecode.javassist.BytecodeProviderImpl.getProxyFactoryFactory(BytecodeProviderImpl.java:49)
	at org.hibernate.tuple.entity.PojoEntityTuplizer.buildProxyFactoryInternal(PojoEntityTuplizer.java:205)
	at org.hibernate.tuple.entity.PojoEntityTuplizer.buildProxyFactory(PojoEntityTuplizer.java:183)
	at org.hibernate.tuple.entity.AbstractEntityTuplizer.<init>(AbstractEntityTuplizer.java:167)
	at org.hibernate.tuple.entity.PojoEntityTuplizer.<init>(PojoEntityTuplizer.java:77)
	... 14 more
Caused by: java.lang.ClassNotFoundException: javassist.util.proxy.MethodFilter
	at java.net.URLClassLoader$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	... 19 more

Alguém consegue me ajudar?
Obrigado.

H

Classe não encontrada … Caused by: java.lang.ClassNotFoundException: javassist.util.proxy.MethodFilter

Parece que está faltando o javassist-XXX.jar

M

Resolvido!
Faltava o seguinte jar:

javassist-3.12.0.GA.jar

Objeto persistido no banco.
que isso sirva de referencia para quem esta iniciando no Hibernate, como eu.
Vivendo e aprendendo.
Obrigado GUJ.

M

henriquejhc:
Classe não encontrada … Caused by: java.lang.ClassNotFoundException: javassist.util.proxy.MethodFilter

Parece que está faltando o javassist-XXX.jar

Isso mesmo obrigado.

P

Olá, pessoal!
Estou iniciando no Hibernate… e, podem ter certeza, me ajudou bastante, dando uma direção para consertar alguns erros que estavam acontecendo aqui!
Valeu msm!

V

Tópico movido para o fórum de persistência.

Criado 15 de janeiro de 2011
Ultima resposta 30 de jan. de 2012
Respostas 8
Participantes 4