Hibernate - Unknown Entity

9 respostas
F

Bom dia pessoal,
Estou com problemas para o meu Hibernate identificar uma classe minha.
COmo uso annotation, não fiz seu mapeamento. O estranho é que tenho outras classes que aparentemente estao identicas e o hibernate a encontra…

O bean que nao identifica:

package br.com.probank.sigos.bean;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Usuario {
	@Id
	private String username;
	private String password;
	
	
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	
	
	
}

Meu Hibernate.properties no src do projeto.

hibernate.dialect = org.hibernate.dialect.MySQLInnoDBDialect
hibernate.connection.driver_class = com.mysql.jdbc.Driver
hibernate.connection.url = jdbc:mysql://localhost/sigos
hibernate.connection.username = root
hibernate.connection.password = root
hibernate.show_sql = true
hibernate.format_sql = true

A exception:

Exception in thread "main" org.hibernate.MappingException: Unknown entity: br.com.probank.sigos.bean.Usuario
	at org.hibernate.impl.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:628)
	at org.hibernate.impl.SessionImpl.getEntityPersister(SessionImpl.java:1366)
	at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:121)
	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:563)
	at org.hibernate.impl.SessionImpl.save(SessionImpl.java:551)
	at org.hibernate.impl.SessionImpl.save(SessionImpl.java:547)
	at br.com.probank.sigos.dao.UsuarioDao.adiciona(UsuarioDao.java:32)
	at br.com.probank.sigos.testes.TestaHibernate.main(TestaHibernate.java:27)

Tem algum erro ai galera?

Obrigado!

9 Respostas

L

Falae, kara olhando rapido aqui que to saindo de casa pra trampar…

Eu costumo usar um

no properties do Hibernate.

Testa ai e dps avisa se funfou!!!

[]s!
Leonardo Gloria

D

kra , por acaso não faltou colocar o seu mapeamento no hibernate.cfg.xml () ou, na classe que instancia o hibernate usar o metodo addAnnotatedClass(Usuario.class) ?

Falo

L

ra , por acaso não faltou colocar o seu mapeamento no hibernate.cfg.xml ( ou, na classe que instancia o hibernate usar o metodo addAnnotatedClass(Usuario.class) ?

Exatamente!

F

Isso mesmo pessoal…
Funcionou ao adicionar o bean!!
Muito obrigado!!

l

F

Pessoal, to caindo nesse mesmo erro.

Meu xml:

<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
...
	<!-- entidades -->
...
<mapping class="br.com.projeto.objeto.Categoria"/>

</session-factory>
</hibernate-configuration>

Minha classe:

package br.com.projeto.objeto;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="tb_categorias")
public class Categoria {
@Id @GeneratedValue
@Column(name="id_categoria")
Long id;
@Column(name="ds_nome")
String nome;
public Long getId() {
	return id;
}
public void setId(Long id) {
	this.id = id;
}
public String getNome() {
	return nome;
}
public void setNome(String nome) {
	this.nome = nome;
}


}

Meu chamado ao hibernate:

package br.com.projeto.dao;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;
import br.com.caelum.vraptor.ioc.Component;
import br.com.projeto.objeto.Categoria;
@Component
public class CategoriaDao {
	private final Session sessao;
	
	public CategoriaDao(Session sessao) {
		super();
		this.sessao = sessao;
	}
...
	public void salva(Categoria categoria) {
		Transaction tx = sessao.beginTransaction();
		sessao.save(categoria);
		tx.commit();
	}

}

Ja restartei varias vezes o Tomcat e o eclipse e ele cai no mesmo erro:

Caused by: org.hibernate.MappingException: Unknown entity: br.com.thor.projeto.Categoria
	at org.hibernate.impl.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:701)
	at org.hibernate.impl.SessionImpl.getEntityPersister(SessionImpl.java:1475)
F

Pessoal, tive de reiniciar o pc pro hibernate atualizar e reconhecer a entidade.
Não sei ainda o motivo do problema.
Toda classe q crio ele nao acha de primeira o caminho pelo xml, creio q seja isso…
Ja atualizei minha jvm tbm!
alguma sujetao pessoal?

F

garcia-jj:
Na documentação diz que você deve sempre usar as annotations do pacote javax.persistence, e usar as annotations do hibernate (citada como extensions) para comportamentos proprietários do Hibernate que não estão na spec do JPA.

Por exemplo: @Formula, @entity(mutable=false), etc…

Bom, alterei só a @Entity para ao invés de importar da javax.persistence , importar agora da import org.hibernate.annotations.

Funfou na hora. mas só na hora, criei owtra entidade do mesmo jeito depois e nao deu nada! mesmo erro!!!
Alguem poderia me ajudar???

M

Aproveitando o tópico, estou com o mesmo problema. Uma coisa que pode ser o motivo é que meu bean não é equivalente a uma tabela, é um outro elemento resultante de uma query SQL que foi executada. Tem alguma coisa que preciso setar diferente?

Meu bean:

public class TAlocacao extends TObjectHCU implements Serializable {
    private static final long serialVersionUID = 1L;    

    private Integer alocacaoid;
    
    private String matricula;
    
    private String nomeFuncionario;
    
    private Integer empresa;
...

O DAO:

@SuppressWarnings("unchecked")
    public ArrayList&lt;T&gt; listarquery(String sql) throws Exception {
        return (ArrayList&lt;T&gt;) session.createSQLQuery(sql).addEntity(this.classe).list();

    }

Se eu colocar os annotations de @Entity e @Id, dá a mensagem

could not read column value from result set: empresa

Tenso…

M

Resolvido, só pra ficar documentado, o problema é que meus nomes de atributos precisam ser exatamente o nome da coluna trazida pelo sql.

Criado 8 de junho de 2010
Ultima resposta 10 de set. de 2010
Respostas 9
Participantes 5