Estou lendo o livro “Programação Java para a Web”. No capitulo 3 o autor explica como configurar o hibernate criando uma classe para criar o objeto SessionFactory, uma classe CONTATO que faz através das annotations o ORM e uma classe para efetuar o CRUD - CONTATOCRUDANNOTATIONS.
Fiz a realização do passo a passo conforme o autor pede, mas ao executar a classe CONTATOCRUDANNOTIONS, dispará a seguinte Exception:
Exception in thread "main" org.hibernate.MappingException: Unknown entity: br.com.javaparaweb.capitulo3.crudannotations.Contato
at org.hibernate.internal.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:1096)
at org.hibernate.internal.SessionImpl.getEntityPersister(SessionImpl.java:1443)
at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:116)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:209)
at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:194)
at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)
at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:715)
at org.hibernate.internal.SessionImpl.save(SessionImpl.java:707)
at org.hibernate.internal.SessionImpl.save(SessionImpl.java:702)
at br.com.javaparaweb.capitulo3.crudannotations.ContatoCrudAnnotations.salvar(ContatoCrudAnnotations.java:20)
at br.com.javaparaweb.capitulo3.crudannotations.ContatoCrudAnnotations.main(ContatoCrudAnnotations.java:58)
XML: hibernate.cfg.xml
<!-- Usando as configurações do C3PO para pool de conexões -->
<property name="c3po.min_size">5</property>
<property name="c3po.max_size">20</property>
<property name="c3po.timeout">300</property>
<property name="c3po.max_statements">50</property>
<property name="c3po.idle_test_period">3000</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="generate_statistics">true</property>
<property name="use_sql_comments">true</property>
<mapping class="Contato" package="br.com.javaparaweb.capitulo3.crudannotations"/>
</session-factory>
</hibernate-configuration>
Class: ContatoCrudAnnotations
import java.sql.Date;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import br.com.javaparaweb.capitulo3.conexao.HibernateUtil;
public class ContatoCrudAnnotations {
private Session sessao;
public ContatoCrudAnnotations(Session sessao) {
this.sessao = sessao;
}
public void salvar(Contato contato) {
sessao.save(contato);
}
public void atualizar(Contato contato) {
sessao.update(contato);
}
public void excluir(Contato contato) {
sessao.delete(contato);
}
@SuppressWarnings("unchecked")
public List<Contato> listar() {
Query consulta = sessao.createQuery("from Contato");
return consulta.list();
}
public Contato buscaContato(int valor) {
Query consulta = sessao.createQuery("from Contato where codigo = :parametro");
consulta.setInteger("parametro", valor);
return (Contato) consulta.uniqueResult();
}
public static void main(String[] args) {
Session sessao = HibernateUtil.getSessionFactory().openSession();
Transaction transacao = sessao.beginTransaction();
ContatoCrudAnnotations contatoCrud = new ContatoCrudAnnotations(sessao);
Contato contato1 = new Contato();
contato1.setNome("Solanu");
contato1.setTelefone("(47) 3333-4444");
contato1.setEmail("solanu@javaparaweb.com.br");
contato1.setDataCadastro(new Date(System.currentTimeMillis()));
contato1.setObservacao("Novo cliente");
contatoCrud.salvar(contato1);
contato1.setObservacao("Retomar contato");
contatoCrud.atualizar(contato1);
Contato contato2 = new Contato();
contato2.setNome("Lunare");
contato2.setTelefone("(47) 7777-5555");
contato2.setEmail("lunare@javaparaweb.com.br");
contato2.setDataCadastro(new Date(System.currentTimeMillis()));
contato2.setObservacao("Cliente em dia");
contatoCrud.salvar(contato2);
System.out.println("Total de registros cadastrados: " + contatoCrud.listar().size());
contatoCrud.excluir(contato2);
transacao.commit();
System.out.println("Total de registros cadastrados: " + contatoCrud.listar().size());
}
}
Class: Contato
i mport java.sql.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="contato")
public class Contato {
@Id
@GeneratedValue
@Column(name = "codigo")
private Integer codigo;
@Column(name = "nome", length = 50, nullable = true)
private String nome;
@Column(name = "telefone", length = 50, nullable = true)
private String telefone;
@Column(name = "email", length = 50, nullable = true)
private String email;
@Column(name = "dt_cad", nullable = true)
private Date dataCadastro;
@Column(name = "obs", nullable = true)
private String observacao;
//getters and setters
public Integer getCodigo() {
return codigo;
}
public void setCodigo(Integer codigo) {
this.codigo = codigo;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getTelefone() {
return telefone;
}
public void setTelefone(String telefone) {
this.telefone = telefone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Date getDataCadastro() {
return dataCadastro;
}
public void setDataCadastro(Date dataCadastro) {
this.dataCadastro = dataCadastro;
}
public String getObservacao() {
return observacao;
}
public void setObservacao(String observacao) {
this.observacao = observacao;
}
}
Arquivo: pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>javaparaweb</groupId>
<artifactId>exemploshibernate</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>Exemplos do Hibernate</name>
<description>Exemplo de conexão com o banco de dados usando Hibernate</description>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.30</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.4.Final</version>
</dependency>
</dependencies>
</project>
Gostaria de saber como resolver o problema. Já li diversos fóruns e nenhuma solução funcionou.