Erro com Hibernate + SGDB PostGreSQL 9.0
Bom tenho uma tabela Mapeada da seguinte forma
O Hibernate Gera essa SQL , que apresenta um erro envolvendo o Campo Data.
Eu peguei essa SQL Gerada e no PostGreManager percebi que o campo Data precisa ta com Aspas dessa forma.
vendas0_."dataVenda" as dataVenda2_1_ . Assim a SQL Funciona.
Como fazer para o Hibernate Gerar dessa forma acima ?
Obs ( Se eu retirar o atributo Data da minha classe o Hibernate funciona normalmente ).
Existe alguma outra coisa que preciso fazer no caso do PostGre pois no Mysql esse código Funciona normal.
select
vendas0_.id as id2_1_,
vendas0_.dataVenda as dataVenda2_1_,
vendas0_.id_usuario as id3_2_1_,
usuario1_.id as id0_0_,
usuario1_.nome as nome0_0_
from
public.vendas vendas0_
left outer join
public.usuario usuario1_
on vendas0_.id_usuario=usuario1_.id
where
vendas0_.id=? Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not load an entity: [hibernate.Vendas#1]
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.loader.Loader.loadEntity(Loader.java:1895)
at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:71)
at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:65)
at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3072)
at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:434)
at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:415)
at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:165)
at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:223)
at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:126)
at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:905)
at org.hibernate.impl.SessionImpl.get(SessionImpl.java:842)
at org.hibernate.impl.SessionImpl.get(SessionImpl.java:835)
at hibernate.MainVendas.main(MainVendas.java:54)
Caused by: org.postgresql.util.PSQLException: ERROR: column vendas0_.datavenda does not exist
Posição: 31
@Entity()
@Table(name = "public.vendas")
public class Vendas implements java.io.Serializable {
@Id
private Integer id;
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name = "id_usuario")
private Usuario usuario;
@Column(name = "dataVenda")
@Temporal(TemporalType.DATE)
private Date dataDaVenda;
@OneToMany(mappedBy="venda")
private List <VendaItens> itens;
public Vendas() {
}
/** Gets and Setters e Hash Code e Equals criados só foram omitidos para economizar */
}
select
vendas0_.id as id2_1_,
vendas0_.dataVenda as dataVenda2_1_,
vendas0_.id_usuario as id3_2_1_,
usuario1_.id as id0_0_,
usuario1_.nome as nome0_0_
from
public.vendas vendas0_
left outer join
public.usuario usuario1_
on vendas0_.id_usuario=usuario1_.id
where
vendas0_.id=? Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not load an entity: [hibernate.Vendas#1]
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.loader.Loader.loadEntity(Loader.java:1895)
at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:71)
at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:65)
at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3072)
at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:434)
at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:415)
at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:165)
at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:223)
at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:126)
at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:905)
at org.hibernate.impl.SessionImpl.get(SessionImpl.java:842)
at org.hibernate.impl.SessionImpl.get(SessionImpl.java:835)
at hibernate.MainVendas.main(MainVendas.java:54)
Caused by: org.postgresql.util.PSQLException: ERROR: column vendas0_.datavenda does not exist
Posição: 31
Rogerio Moraleida
Curtidas 0
Respostas
Robson Teixeira
16/10/2010
Olá amigo
verifique como vc está gerendo a query pois pode ser isso ou teste colocando a anotação @Column no atributo id pois se faltar anotação ou anotou errado as querys dificilmente funcionam.
ate+.
verifique como vc está gerendo a query pois pode ser isso ou teste colocando a anotação @Column no atributo id pois se faltar anotação ou anotou errado as querys dificilmente funcionam.
ate+.
GOSTEI 0
Rogerio Moraleida
16/10/2010
Olá amigo
verifique como vc está gerendo a query pois pode ser isso ou teste colocando a anotação @Column no atributo id pois se faltar anotação ou anotou errado as querys dificilmente funcionam.
ate+.
Opa blz ? Amigo o erro esta na Data pois se eu retirar o atributo Date o Hibernate funciona sem erro.
Pegando a SQL Gerada pelo Hibernate eu coloquei ela para funcionar mas foi preciso colocar aspas no field da data
assim database."data" as data só assim funcionou , nucna vi isso só no postgre que deu isso.
verifique como vc está gerendo a query pois pode ser isso ou teste colocando a anotação @Column no atributo id pois se faltar anotação ou anotou errado as querys dificilmente funcionam.
ate+.
GOSTEI 0
Davi Costa
16/10/2010
Rogério,
testa na tua anotação trocar por:
@Temporal(TemporalType.TIMESTAMP)
Depois manda o feedBack se funcionou.
Att Davi
testa na tua anotação trocar por:
@Temporal(TemporalType.TIMESTAMP)
Depois manda o feedBack se funcionou.
Att Davi
GOSTEI 0
Rogerio Moraleida
16/10/2010
Rogério,
testa na tua anotação trocar por:
@Temporal(TemporalType.TIMESTAMP)
Depois manda o feedBack se funcionou.
Att Davi
testa na tua anotação trocar por:
@Temporal(TemporalType.TIMESTAMP)
Depois manda o feedBack se funcionou.
Att Davi
GOSTEI 0
Rogerio Moraleida
16/10/2010
Rogério,
testa na tua anotação trocar por:
@Temporal(TemporalType.TIMESTAMP)
Depois manda o feedBack se funcionou.
Att Davi
testa na tua anotação trocar por:
@Temporal(TemporalType.TIMESTAMP)
Depois manda o feedBack se funcionou.
Att Davi
GOSTEI 0
Davi Costa
16/10/2010
Certo,
esse banco foi o hibernate que gerou?
Tenta gerar esse banco com outro nome e compara c o banco que vc já tem.
Realmente o que vc está relatando está muito estranho, por isso tenta fazer o hibernate gerar esse
campo e compara as tabelas, para ver se tem diferença.
Att Davi
esse banco foi o hibernate que gerou?
Tenta gerar esse banco com outro nome e compara c o banco que vc já tem.
Realmente o que vc está relatando está muito estranho, por isso tenta fazer o hibernate gerar esse
campo e compara as tabelas, para ver se tem diferença.
Att Davi
GOSTEI 0
Robson Teixeira
16/10/2010
mande o hibernate gerar as tabelas e teste pois também acho que ta estranho d+
GOSTEI 0
Davi Costa
16/10/2010
Desculpe se me expressei mal,
é pq o hibernate tem uma opção que podemos configurar para quando a aplicação subir ele gera o banco.
Daí falei para vc usar esse recurso com um nome de banco diferente para você poder comparar esse campo
que está dando problema no postgres. Só isso para ver se o hibernate cria essa coluna da mesma forma como está esse banco que já existe.
Se tiver alguma dúvida para usar esse recurso pesquisa por;
<property name="hibernate.hbm2ddl.auto" value="create" />
Espero ter sido claro agora.
Att Davi
é pq o hibernate tem uma opção que podemos configurar para quando a aplicação subir ele gera o banco.
Daí falei para vc usar esse recurso com um nome de banco diferente para você poder comparar esse campo
que está dando problema no postgres. Só isso para ver se o hibernate cria essa coluna da mesma forma como está esse banco que já existe.
Se tiver alguma dúvida para usar esse recurso pesquisa por;
<property name="hibernate.hbm2ddl.auto" value="create" />
Espero ter sido claro agora.
Att Davi
GOSTEI 0
Dyego Carmo
16/10/2010
Tentou atualizar o driver JDBC do postgresql ? Ou atualizar seu hibernate para a 3.6 ?
GOSTEI 0
Rogerio Moraleida
16/10/2010
Tentou atualizar o driver JDBC do postgresql ? Ou atualizar seu hibernate para a 3.6 ?
Sim eu baixei o driver mais novo e o hibernate mais novo tambem.
Creio que o problema seja do driver pois mudei o banco para MYSQL e deu tudo certo.
Sem mudar uma linha.
Esquesito né rss ... o foda é que eu precisava de usar o postgree.
Ah você ta de parabens as AULAS SÃO MUTIO BOAS E VC TEM UMA DIDATICA OTIMA.
GOSTEI 0
Rogerio Moraleida
16/10/2010
Galera descobri o erro.
E o erro e no PostGre
eu criei o campo dataVenda com o V maiusculo....
Não sei pq mais somente no postgre deu biziu nas SQL...
Mudei para minusculo e o erro não existe mais.
SINISTRO.
GOSTEI 0
Davi Costa
16/10/2010
A alguns post te notifiquei para deixar o hibernate gerar o banco, já teria descoberto,
ou o seu banco já havia sido gerado pelo hibernate de forma errada?
Mas de qualquer forma muito bom c ter solucionado seu problema. :)
Att Davi
ou o seu banco já havia sido gerado pelo hibernate de forma errada?
Mas de qualquer forma muito bom c ter solucionado seu problema. :)
Att Davi
GOSTEI 0
Rogerio Moraleida
16/10/2010
A alguns post te notifiquei para deixar o hibernate gerar o banco, já teria descoberto,
ou o seu banco já havia sido gerado pelo hibernate de forma errada?
Mas de qualquer forma muito bom c ter solucionado seu problema. :)
Att Davi
Então eu tinha mandado o hibernate gerar e tambem não tinha resolvido pois meu atributo tambem estava com a segunda palavra iniciada em maiuscula .
Exemplo dataNascimento.. e pelo q constei o postgre tem uns pau em relação aos nomes... tem qpadronizar tudo minusculo que fica beleza.
ou o seu banco já havia sido gerado pelo hibernate de forma errada?
Mas de qualquer forma muito bom c ter solucionado seu problema. :)
Att Davi
GOSTEI 0
Davi Costa
16/10/2010
Hmmm..
poh cara bom saber então, realmente não utilizei ainda essa versão do postgres,
então será necessário sempre passar o parâmetro name dentro de @Column.
Ex.:
@Column(name="datanascimento")
Cara faz só mais um favorzão p todos da comunidade testa com:
@Column(name="data_nascimento")
Para ver também se continuaria esse problema.
De ante mã grato :) !
Att Davi
poh cara bom saber então, realmente não utilizei ainda essa versão do postgres,
então será necessário sempre passar o parâmetro name dentro de @Column.
Ex.:
@Column(name="datanascimento")
Cara faz só mais um favorzão p todos da comunidade testa com:
@Column(name="data_nascimento")
Para ver também se continuaria esse problema.
De ante mã grato :) !
Att Davi
GOSTEI 0
Rogerio Moraleida
16/10/2010
Hmmm..
poh cara bom saber então, realmente não utilizei ainda essa versão do postgres,
então será necessário sempre passar o parâmetro name dentro de @Column.
Ex.:
@Column(name="datanascimento")
Cara faz só mais um favorzão p todos da comunidade testa com:
@Column(name="data_nascimento")
Para ver também se continuaria esse problema.
De ante mã grato :) !
Att Davi
poh cara bom saber então, realmente não utilizei ainda essa versão do postgres,
então será necessário sempre passar o parâmetro name dentro de @Column.
Ex.:
@Column(name="datanascimento")
Cara faz só mais um favorzão p todos da comunidade testa com:
@Column(name="data_nascimento")
Para ver também se continuaria esse problema.
De ante mã grato :) !
Att Davi
GOSTEI 0
Rogerio Moraleida
16/10/2010
Hmmm..
poh cara bom saber então, realmente não utilizei ainda essa versão do postgres,
então será necessário sempre passar o parâmetro name dentro de @Column.
Ex.:
@Column(name="datanascimento")
Cara faz só mais um favorzão p todos da comunidade testa com:
@Column(name="data_nascimento")
Para ver também se continuaria esse problema.
De ante mã grato :) !
Att Davi
Dessa maneira funciona na boa.
Pelo visto só nao pode ficar assim
@Column(name="data_Nascimento")poh cara bom saber então, realmente não utilizei ainda essa versão do postgres,
então será necessário sempre passar o parâmetro name dentro de @Column.
Ex.:
@Column(name="datanascimento")
Cara faz só mais um favorzão p todos da comunidade testa com:
@Column(name="data_nascimento")
Para ver também se continuaria esse problema.
De ante mã grato :) !
Att Davi
ou @Column(name="dataNascimento")
Com letra maiuscula
GOSTEI 0
Dyego Carmo
16/10/2010
Funcionou ? Poderia fechar o POST ?
GOSTEI 0