run:
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.
Hibernate:
insert
into
BANCOS
(NOME)
values
(?)
org.hibernate.exception.SQLGrammarException: could not insert: [br.com.audcont.conversor.to.Banco]
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.id.insert.AbstractSelectingDelegate.performInsert(AbstractSelectingDelegate.java:64)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2186)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2666)
at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:71)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:321)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:117)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:534)
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:526)
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:522)
at br.com.audcont.conversor.dao.Dao.inserirOuAtualizar(Dao.java:18)
at br.com.audcont.conversor.apresentacao.teste.main(teste.java:22)
Caused by: org.postgresql.util.PSQLException: ERRO: relação "bancos" não existe
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1608)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1343)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:194)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:451)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:350)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:304)
at org.hibernate.id.insert.AbstractSelectingDelegate.performInsert(AbstractSelectingDelegate.java:57)
... 16 more
Exception in thread "main" java.lang.RuntimeException
at br.com.audcont.conversor.dao.Dao.inserirOuAtualizar(Dao.java:25)
at br.com.audcont.conversor.apresentacao.teste.main(teste.java:22)
Java Result: 1
Que tipo de relacionamento vc fez entre as classes? Como vc está persistindo isso?
D
Dassayev
Abaixo está a classe das duas classes.
Banco
/* * To change this template, choose Tools | Templates * and open the template in the editor. */packagebr.com.audcont.conversor.to;importjava.io.Serializable;importjava.util.List;importjavax.persistence.Basic;importjavax.persistence.CascadeType;importjavax.persistence.Column;importjavax.persistence.Entity;importjavax.persistence.Id;importjavax.persistence.NamedQueries;importjavax.persistence.NamedQuery;importjavax.persistence.OneToMany;importjavax.persistence.Table;/** * * @author Dassayev Barbosa */@Entity@Table(name="BANCOS",schema="carajas")@NamedQueries({@NamedQuery(name="Banco.findAll",query="SELECT b FROM Banco b"),@NamedQuery(name="Banco.findById",query="SELECT b FROM Banco b WHERE b.id = :id"),@NamedQuery(name="Banco.findByNome",query="SELECT b FROM Banco b WHERE b.nome = :nome")})publicclassBancoimplementsSerializable{privatestaticfinallongserialVersionUID=1L;@Id@Basic(optional=false)@Column(name="ID")privateLongid;@Basic(optional=false)@Column(name="NOME")privateStringnome;@OneToMany(cascade=CascadeType.ALL,mappedBy="idBanco")privateList<LancamentoImportado>lancamentoImportadoList;publicBanco(){}publicBanco(Longid){this.id=id;}publicBanco(Longid,Stringnome){this.id=id;this.nome=nome;}publicLonggetId(){returnid;}publicvoidsetId(Longid){this.id=id;}publicStringgetNome(){returnnome;}publicvoidsetNome(Stringnome){this.nome=nome;}publicList<LancamentoImportado>getLancamentoImportadoList(){returnlancamentoImportadoList;}publicvoidsetLancamentoImportadoList(List<LancamentoImportado>lancamentoImportadoList){this.lancamentoImportadoList=lancamentoImportadoList;}@OverridepublicinthashCode(){inthash=0;hash+=(id!=null?id.hashCode():0);returnhash;}@Overridepublicbooleanequals(Objectobject){// TODO: Warning - this method won't work in the case the id fields are not setif(!(objectinstanceofBanco)){returnfalse;}Bancoother=(Banco)object;if((this.id==null&&other.id!=null)||(this.id!=null&&!this.id.equals(other.id))){returnfalse;}returntrue;}@OverridepublicStringtoString(){return"br.com.audcont.conversor.to.Banco[id="+id+"]";}}
LancamentoImportado
/* * To change this template, choose Tools | Templates * and open the template in the editor. */packagebr.com.audcont.conversor.to;importjava.io.Serializable;importjava.math.BigDecimal;importjava.util.Date;importjavax.persistence.Basic;importjavax.persistence.Column;importjavax.persistence.Entity;importjavax.persistence.Id;importjavax.persistence.JoinColumn;importjavax.persistence.ManyToOne;importjavax.persistence.NamedQueries;importjavax.persistence.NamedQuery;importjavax.persistence.Table;importjavax.persistence.Temporal;importjavax.persistence.TemporalType;/** * * @author Angelika */@Entity@Table(name="LANCAMENTOS_IMPORTADOS",schema="carajas")@NamedQueries({@NamedQuery(name="LancamentoImportado.findAll",query="SELECT l FROM LancamentoImportado l"),@NamedQuery(name="LancamentoImportado.findById",query="SELECT l FROM LancamentoImportado l WHERE l.id = :id"),@NamedQuery(name="LancamentoImportado.findByData",query="SELECT l FROM LancamentoImportado l WHERE l.data = :data"),@NamedQuery(name="LancamentoImportado.findByValor",query="SELECT l FROM LancamentoImportado l WHERE l.valor = :valor"),@NamedQuery(name="LancamentoImportado.findByNumeroCheque",query="SELECT l FROM LancamentoImportado l WHERE l.numeroCheque = :numeroCheque"),@NamedQuery(name="LancamentoImportado.findByHistorico",query="SELECT l FROM LancamentoImportado l WHERE l.historico = :historico")})publicclassLancamentoImportadoimplementsSerializable{privatestaticfinallongserialVersionUID=1L;@Id@Basic(optional=false)@Column(name="ID")privateLongid;@Column(name="DATA")@Temporal(TemporalType.DATE)privateDatedata;@Column(name="VALOR")privateBigDecimalvalor;@Column(name="NUMERO_CHEQUE")privateStringnumeroCheque;@Column(name="HISTORICO")privateStringhistorico;@JoinColumn(name="ID_BANCO",referencedColumnName="ID")@ManyToOne(optional=false)privateBancoidBanco;publicLancamentoImportado(){}publicLancamentoImportado(Longid){this.id=id;}publicLonggetId(){returnid;}publicvoidsetId(Longid){this.id=id;}publicDategetData(){returndata;}publicvoidsetData(Datedata){this.data=data;}publicBigDecimalgetValor(){returnvalor;}publicvoidsetValor(BigDecimalvalor){this.valor=valor;}publicStringgetNumeroCheque(){returnnumeroCheque;}publicvoidsetNumeroCheque(StringnumeroCheque){this.numeroCheque=numeroCheque;}publicStringgetHistorico(){returnhistorico;}publicvoidsetHistorico(Stringhistorico){this.historico=historico;}publicBancogetIdBanco(){returnidBanco;}publicvoidsetIdBanco(BancoidBanco){this.idBanco=idBanco;}@OverridepublicinthashCode(){inthash=0;hash+=(id!=null?id.hashCode():0);returnhash;}@Overridepublicbooleanequals(Objectobject){// TODO: Warning - this method won't work in the case the id fields are not setif(!(objectinstanceofLancamentoImportado)){returnfalse;}LancamentoImportadoother=(LancamentoImportado)object;if((this.id==null&&other.id!=null)||(this.id!=null&&!this.id.equals(other.id))){returnfalse;}returntrue;}@OverridepublicStringtoString(){return"br.com.audcont.conversor.to.LancamentoImportado[id="+id+"]";}}
Fazendo a alteração solicitada o seguinte erro foi gerado:
run:
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.
org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: br.com.audcont.conversor.to.LancamentoImportado.Banco in br.com.audcont.conversor.to.Banco.lancamentoImportadoList
at org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:578)
at org.hibernate.cfg.annotations.CollectionBinder$1.secondPass(CollectionBinder.java:543)
at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:66)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1163)
at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:329)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1319)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)
at br.com.audcont.conversor.dao.HibernateUtility.<clinit>(HibernateUtility.java:34)
at br.com.audcont.conversor.dao.Dao.listar(Dao.java:34)
at br.com.audcont.conversor.dao.BancoDAO.getBancos(BancoDAO.java:21)
at br.com.audcont.conversor.apresentacao.teste.main(teste.java:22)
Exception in thread "main" java.lang.NullPointerException
at br.com.audcont.conversor.dao.HibernateUtility.getSession(HibernateUtility.java:42)
at br.com.audcont.conversor.dao.Dao.listar(Dao.java:34)
at br.com.audcont.conversor.dao.BancoDAO.getBancos(BancoDAO.java:21)
at br.com.audcont.conversor.apresentacao.teste.main(teste.java:22)
Java Result: 1
Acho que o problema não era isso. O MappedBy é o nome da campo da outra classe.
G
Guevara
O problema era esse, o mappedBy é o nome da classe e não da ID da classe, deixe a classe Banco com a anotação que postei:
Não deu certo! Já to doido aqui!!! O que será que pode ser isso?
G
Guevara
Tira o schema=“carajas” das classes, no Postgre deve estar a “public”.
R
Romildo_Paiter
E ai blz…
Seguinte semana passada eu estava desenvolvendo um projeto usando do DB postgresql, só que eu tive grandes problemas com ele sobre como manter o Case sensitive do banco.
Criava todas as tabelas mas na hora de inserir, não inseria de jeito maneira. foi aqui que resolvi migrar para o MySQL.
Mas tente manter todas as tabelas e seus atributos minúsculos, usando o PostgreSQL.
att
Romildo Jozue Paiter
D
Dassayev
Era exatamente isso! Coloquei tudo para minúsculo e funcionou!
Obrigado a todos!!!
Um abraço!
R
Romildo_Paiter
Blz, Dassayev.
Pois é, o postgresql tem isso, é algo a respeito de estar ativado o Case Sensitive. não pesquisei como desabilitar isso, e se se interessar passa o procedimento que você fez.
Se ficou tudo funcionado, com tudo minusculo, já é alguma coisa.
Falow, bom FDS.
att
Romildo Paiter
D
Dassayev
O procedimento que eu fiz foi renomear as tables e os campos para minúsculo e refazer o mapeamento do hibernate, pois o nome das tables e dos campos estavam todos em maiúsculo no mapeamento (e no banco também). Fiz isso e deu certo.
Também vou dar uma pesquisada em como desabilitar o case sensitive. Qualquer coisa eu posto aqui.