Bom dia, pessoal estou com um problema e não consigo resolver.
Bom eu criei um projetinho jsf com hibernate e mysql, funcionou perfeitamente, então resolvi migrar esse projeto, usando o postgreSQL,
Porem estou recebendo uma mensagem de erro.
Aqui é meu hibernate.cfg.xml
<?xml version='1.0' encoding='utf-8'?><!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><!--Configurações do hibernate: mapeamento dos objetos --><hibernate-configuration><!--session-factory atraves dele é que eu faço o mapeamento e as configurações do hibernate --><session-factory><!--Configuração com o banco mysql e dialecto --><propertyname="hibernate.connection.driver_class">org.postgresql.Driver</property><propertyname="hibernate.connection.url">jdbc:postgresql://localhost:5433/login</property><propertyname="hibernate.connection.username">postgres</property><propertyname="hibernate.connection.password">160406</property><propertyname="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property><propertyname="current_session_context_class">thread</property><propertyname="hibernate.hbm2dll.auto">update</property><mappingclass="com.br.joaoleno.usuario.Usuario"></mapping></session-factory></hibernate-configuration>
Alguem poderia me ajudar a solucionar esse problema?
estou tendo o seguinte erro.
Você nao precisa fica abrindo vários topicos para resolver seu problema, tenha calma
J
joaolenosi
DaniloAndrade , acredito que esteja certa, por que eu tinha um projeto desktop que utilizava o hibvernate e o banco era o postgresql, e a url era essa.
D
DaniloAndrade
vc pode colocar sua classe HibernateUtil pra gente ver
J
joaolenosi
DaniloAndrade, Olhe aí a classe
/* Class responsavel por fazer a ponte entre o arquivo de configuração e a conexão com o banco. */packagecom.br.joaoleno.util;/** * * @author Joao Leno */importorg.hibernate.HibernateException;importorg.hibernate.SessionFactory;importorg.hibernate.cfg.AnnotationConfiguration;importorg.hibernate.cfg.Configuration;publicclassHibernateUtil{privatestaticfinalSessionFactorysessionFactory=buildSessionFactory();//Cria uma instancia de SessionFactory privatestaticSessionFactorybuildSessionFactory()//Metodo responsavel por configurar o ambiente e retorna uma SessionFactory{try{AnnotationConfigurationcfg=newAnnotationConfiguration();cfg.configure("hibernate.cfg.xml");//Cria uma SessionFactory com base no arquivo xml returncfg.buildSessionFactory();//Configura o hibernate e retorna uma SessionFactory}catch(Throwableerro){System.out.println("Criação e inicial do objeto SessionFacotry. Erro.: "+erro.getMessage());thrownewExceptionInInitializerError(erro);//Acionado para indicar que ocorreu uma exceção durante a avaliação de um inicializado estatico ou inicializador para uma váriavel estática.}}publicstaticSessionFactorygetSessionFactory()//Metodo responsavel por retornar uma SessionFactory{returnsessionFactory;}}
J
joaolenosi
o erro tá dando nessa classe, ele tá caindo no catch, mas é muito estranho no mysql, funciona
J
joaolenosi
Ooow e agora quem poderá me defender ?
D
DaniloAndrade
troca
AnnotationConfiguration cfg = new AnnotationConfiguration(); cfg.configure("hibernate.cfg.xml");//Cria uma SessionFactory com base no arquivo xml
por
Configuration cfg = new Configuration();
cfg .configure();
ve se resolve
J
joaolenosi
Da erro, por que estou usando notações
Caused by: org.hibernate.MappingException: An AnnotationConfiguration instance is required to use
D
DaniloAndrade
coloca sua classe Usuario
J
joaolenosi
minha classe Usuario, já estava colocada. Porem ainda recebo aquela mensagem de erro.
D
DaniloAndrade
não coloca o codigo da sua classe Usuario pra gente poder ver
J
joaolenosi
Beleza taew o código da minha classe Usuario
packagecom.br.joaoleno.usuario;/* * @author Joao Leno */importjava.io.*;importjavax.persistence.*;importjava.util.*;@Entity//Entidade@Table(name="usuario")publicclassUsuario{@Id@GeneratedValueprivateIntegeridUsuario;// @Column (name="nomeUsuario")nome e na minha classe fosse outroprivateStringnome;@org.hibernate.annotations.NaturalId//Siginifica que o campo email, é único, ou seja, não pode haver email repetido.privateStringemail;privateStringsenha;privateStringidioma;privateBooleanestatus;publicStringgetEmail(){returnemail;}publicvoidsetEmail(Stringemail){this.email=email;}publicIntegergetIdUsuario(){returnidUsuario;}publicvoidsetIdUsuario(IntegeridUsuario){this.idUsuario=idUsuario;}publicStringgetIdioma(){returnidioma;}publicvoidsetIdioma(Stringidioma){this.idioma=idioma;}publicStringgetNome(){returnnome;}publicvoidsetNome(Stringnome){this.nome=nome;}publicStringgetSenha(){returnsenha;}publicvoidsetSenha(Stringsenha){this.senha=senha;}publicBooleangetEstatus(){returnestatus;}publicvoidsetEstatus(Booleanstatus){this.estatus=status;}@Overridepublicbooleanequals(Objectobj){if(obj==null){returnfalse;}if(getClass()!=obj.getClass()){returnfalse;}finalUsuarioother=(Usuario)obj;if(this.idUsuario!=other.idUsuario&&(this.idUsuario==null||!this.idUsuario.equals(other.idUsuario))){returnfalse;}if((this.nome==null)?(other.nome!=null):!this.nome.equals(other.nome)){returnfalse;}if((this.email==null)?(other.email!=null):!this.email.equals(other.email)){returnfalse;}if((this.senha==null)?(other.senha!=null):!this.senha.equals(other.senha)){returnfalse;}if((this.idioma==null)?(other.idioma!=null):!this.idioma.equals(other.idioma)){returnfalse;}if(this.estatus!=other.estatus&&(this.estatus==null||!this.estatus.equals(other.estatus))){returnfalse;}returntrue;}@OverridepublicinthashCode(){inthash=5;hash=13*hash+(this.idUsuario!=null?this.idUsuario.hashCode():0);hash=13*hash+(this.nome!=null?this.nome.hashCode():0);hash=13*hash+(this.email!=null?this.email.hashCode():0);hash=13*hash+(this.senha!=null?this.senha.hashCode():0);hash=13*hash+(this.idioma!=null?this.idioma.hashCode():0);hash=13*hash+(this.estatus!=null?this.estatus.hashCode():0);returnhash;}}
M
maior_abandonado
provavelmente não tem a ver com o código feito, até por que se fosse esse o caso não funcionaria com o my sql, inclusive o erro que está ocorrendo diz que a classe não está mapeada, por causa do descrito abaixo.
DaniloAndrade:
troca
AnnotationConfiguration cfg = new AnnotationConfiguration(); cfg.configure("hibernate.cfg.xml");//Cria uma SessionFactory com base no arquivo xml
por
Configuration cfg = new Configuration();
cfg .configure();
ve se resolve
fazendo deste jeito o hibernate não vai encontrar o arquivo xml de configuração dele, acredito que nesse caso ele irá procurar um hibernate.properties, que nesse caso não existe, por isso o erro dizendo :
Caused by: org.hibernate.MappingException: An AnnotationConfiguration instance is required to use
joaolenosi, eu nunca usei o postgree, mas me parece pela descrição do erro ser alguma coisa no seu driver, procure pegar alguma versão do driver referente a mesma versão do banco de dados e tente com a mais recente, veja se com uma das duas funciona.
D
DaniloAndrade
comenta essa linha @org.hibernate.annotations.NaturalId e faz um teste pra ver
J
joaolenosi
maior_abandonado, o que você falou tem plena coerência. Acredito que também seja o drive.
Eu tenho o postgreSQL 8.2 e o postgreSQL 9.1 e todos já vem com o drive, já tentei utilizar as diferentes versões com seus respectivos jdbc e mesmo assim não deu certo,
fico recebendo essa mensagem de erro.
Danilo fiz o teste assim, tambem da erro.
Acredito que o problema não seja com o código, até por que esse projeto funciona da mesma forma no mysql. A única coisa que alterei foi os drives e o hibernate.cfg.xml
10/07/2012 10:37:53 org.apache.catalina.core.StandardContext filterStart
SEVERE: Exception starting filter HibernateFilter
java.lang.ExceptionInInitializerError
at com.br.joaoleno.util.HibernateUtil.buildSessionFactory(HibernateUtil.java:30)
at com.br.joaoleno.util.HibernateUtil.<clinit>(HibernateUtil.java:17)
at com.br.joaoleno.web.filter.HibernateSessionRequestFilter.init(HibernateSessionRequestFilter.java:22)
at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:273)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:254)
at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:372)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:98)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4584)
at org.apache.catalina.core.StandardContext$2.call(StandardContext.java:5262)
at org.apache.catalina.core.StandardContext$2.call(StandardContext.java:5257)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at java.lang.Thread.run(Thread.java:619)
Caused by: org.hibernate.MappingException: An AnnotationConfiguration instance is required to use <mapping class="com.br.joaoleno.usuario.Usuario"/>
at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:1692)
at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1647)
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1626)
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1600)
at org.hibernate.cfg.Configuration.configure(Configuration.java:1520)
at org.hibernate.cfg.Configuration.configure(Configuration.java:1506)
at com.br.joaoleno.util.HibernateUtil.buildSessionFactory(HibernateUtil.java:24)
... 14 more
D
DaniloAndrade
volta esse codigo novamente
AnnotationConfiguration cfg = new AnnotationConfiguration(); cfg.configure("hibernate.cfg.xml");
D
DaniloAndrade
acho que encontrei o problema
vc mapeou assim
no seu hibernate.cfg.xml
mas sua classe ta no pacote
com.br.joaoleno
coloca assim no seu xml
e faz um teste
D
DaniloAndrade
desconside o que falei
estão iguais os dois
foi mau
J
joaolenosi
DaniloAndrade, voltei para a mesma comentei aquela parte, e deu o mesmo erro.
Eu parei pra pensar, e me lembrei que meu campo id e auto_increment no mysql e no postgresql ele é do tipo serial , ja que no postgre não possui o auto_increment.
Mais eu acho que faz a mesma função de incrementar!!
o do mysql é o projeto usuario que tá funcionando perfeitamente e o do postgre é o projeto cad.
Alguem poderia baixar pra fazer o teste?
Eu ja coloquei a tabela do postgre e a do mysql no arquivo txt, só basta criar o banco login e a tabela que ta no arquivo.
PS. Eu coloquei todos os jdbc para vocês terem acesso, mas eu ja testei todos um a um, e nenhum funciounou.
Estou utilizando uma porta diferente, por que eu tenho dois postgres instalados na minha máquina 8.2 e o 9.1, aí cada um utiliza uma porta diferente, mais neeste caso estou utilizando o 9.1.
D
DaniloAndrade
não consigo fazer download do 4shared onde estou agora.
queria poder ajudar, mas esse ta complicado
J
joaolenosi
DaniloAndrade , ah beleza brother!
De qualquer forma obrigado pela ajuda
M
maior_abandonado
[quote=joaolenosi]DaniloAndrade, voltei para a mesma comentei aquela parte, e deu o mesmo erro.
Eu parei pra pensar, e me lembrei que meu campo id e auto_increment no mysql e no postgresql ele é do tipo serial , ja que no postgre não possui o auto_increment.
Mais eu acho que faz a mesma função de incrementar!!
pelo que dei uma olhada, o tipo serial cria uma sequence e usa ela em baixo dos panos.
sendo assim eu ia te falar para configurar como uma sequence.
o GenerationType default (auto), que está no seu código não vai funcionar com sequence por que não sabe o nome da sequence a usar… o auto no caso do postgree acho que vai tentar com sequence…