Olá,
Estou tentando fazer um exemplo bem simples de persistencia de dados usando o hibernate, porém está dando esta exeção:
0 [main] INFO org.hibernate.cfg.annotations.Version - Hibernate Annotations 3.4.0.GA
32 [main] INFO org.hibernate.cfg.Environment - Hibernate 3.3.1.GA
32 [main] INFO org.hibernate.cfg.Environment - hibernate.properties not found
32 [main] INFO org.hibernate.cfg.Environment - Bytecode provider name : javassist
32 [main] INFO org.hibernate.cfg.Environment - using JDK 1.4 java.sql.Timestamp handling
125 [main] INFO org.hibernate.annotations.common.Version - Hibernate Commons Annotations 3.1.0.GA
125 [main] INFO org.hibernate.ejb.Version - Hibernate EntityManager 3.4.0.GA
Exception in thread "main" java.lang.AbstractMethodError: org.slf4j.impl.SimpleLogger.trace(Ljava/lang/String;Ljava/lang/Object;)V
at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:221)
at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:125)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:52)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:34)
at hibernate.teste.TesteHibernate.main(TesteHibernate.java:10)
Abaixo segue o código:
package hibernate.teste;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class TesteHibernate {
public static void main(String[] args) {
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("maindatabasePU");
EntityManager entityManager = entityManagerFactory.createEntityManager();
Aluno aluno = new Aluno();
aluno.setId(8);
aluno.setNome("Cris");
aluno.setEmail("cris@kiq.com.br");
entityManager.getTransaction().begin();
entityManager.persist(aluno);
entityManager.getTransaction().commit();
entityManager.close();
}
}
Na verdade eu estou seguindo um pequeno tutorial, e pelo que eu entendi no tutorial o mapeamento das classes é feito usando essas Annotations usada na classe Aluno, indicando a entidade e a chave primária, no tutorial não fala sobre este arquivo de configuração que vc postou, mas vou tentar usa-lo pra ver!!!
no classpath,na verdade vc esta usando Jpa neh,pois vc tem um arquivo persistence.xml,acredito que o mapeamento das classes anotadas deve ficar lah entaum.
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>pacote.classe</class> //aqui vc coloca o caminho da sua classe, faça isso para todas as classes
<class>pacote.classe</class>
...
Ish…ainda assim não funcionou não, continua dando a mesma exception falando sobre essa classe org.slf4j.impl.SimpleLogger:
Exception in thread "main" java.lang.AbstractMethodError: org.slf4j.impl.SimpleLogger.trace(Ljava/lang/String;Ljava/lang/Object;)V
at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:221)
Eu deixei o hibernate.cfg.xml do mesmo jeito que o seu apenas apaguei o mapeamento das suas classes e coloquei a minha:
Opa Renato, não adiantou também…a exceção ainda persiste…acredito que não deva ser algo no mapeamento da classe Aluno não, acho que é algo no persistence pois o erro ocorre na segiunte linha:
Se no banco o nome das colunas estiverem diferente influenciam sim
Se no mapeamento o nome que vc vai usar para fazer referencia a coluna for diferente do nome da coluna no banco vc precisa usar um annotation.
Da seguinte forma
Vamos supor que o seu banco chama-se ‘teste’ e tem apenas duas colunas, ‘teste_id’ e ‘nome’, ficaria assim seu mapeamento:
@Entity
@Table(name = "teste") //Aqui fica o nome da tabela
public class Teste{
@Id
@Column(name = "teste_id")
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private String nome;
//get set
//hashcode e equals
Se o nome da coluna for diferente vc precisa colocar @Column(name = “”) para informar ao hibernate que o nome da coluna será diferente do que vc vai usar.
Note que isso tambem acontece com o nome da tabela. Aqui não seria necessario o uso do annotation @Table(name = “”), porque o nome da classe é o mesmo da tabela.
faça o teste, tire o underline, e se tiver alguns nomes diferentes acrescente o @Column.
Valew Renato, tirei os underlines mas mesmo assim a exception continua, o tutorial que estou seguindo os atributos estão com underline e no banco sem e o mapeamento coom annotation é feito em cima do méthodo get, porque será em?
Eu acho que axception deva ser na hora de cria o entityManager, porque se fosse com relação a alguma coluna eu acho que teria falando isso na exception, ou teria alguma indicação, não sei.
Mas valew pela ajuda ai!!