Problema com hibernate com dao generico

5 respostas
R

Pessoal estou desenvolvendo um projeto, onde utilizo spring e hibernate(com dao generico e annotations). Ao tentar persistir um objeto aparece o erro abaixo.
Alguem já passou por isso. Quem quiser meu projeto para dá uma olhada melhor, favor mandar mail [email removido]

public interface CrudDAO<T extends Serializable, PK extends Serializable>

public class CrudDAOImpl<T extends Serializable, PK extends Serializable> extends HibernateDaoSupport implements CrudDAO<T, PK>

public class TabFunDAO extends CrudDAOImpl<Funcionario, Integer>
public void save(T entity)
{
	getHibernateTemplate().save(entity);  ------->>>>>>o debug chega até aqui
}

Desde já obrigado…

Exception in thread main org.springframework.dao.InvalidDataAccessResourceUsageException: Could not execute JDBC batch update; nested exception is org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update

at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:613)

at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)

at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:378)

at org.springframework.orm.hibernate3.HibernateTemplate.save(HibernateTemplate.java:639)

at br.com.dao.CrudDAOImpl.save(CrudDAOImpl.java:47)

at br.com.exec.Principal.main(Principal.java:23)

Caused by: org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update

at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)

at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)

at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:253)

at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:235)

at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:139)

at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)

at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)

at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)

at org.springframework.orm.hibernate3.HibernateAccessor.flushIfNecessary(HibernateAccessor.java:390)

at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:374)

 3 more

Caused by: java.sql.BatchUpdateException: ORA-01722: número inválido
at oracle.jdbc.driver.DatabaseError.throwBatchUpdateException(DatabaseError.java:343)
at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:10657)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:246)
... 10 more

5 Respostas

Javabuntu

colega posta ai essa sua classe: br.com.dao.CrudDAOImpl pra dar uma olhada nela…

e também o método que está usando pra chamá-la…

D

Num seria uma incompatibilidade de tipos entre a classe Java e a definição do campo no banco de dados. Poste o DDL da tabela, o código da classe e o mapeamento.

dc.rec1

Parece que esta querendo executar uma query que esta tentando converter uma string num número, sem sucesso.

adriano_si

Ressucitando o mortos…

Achei esse topico pelo Google e estou com um problema parecido Vejam o StackTrace:

could not execute query; nested exception is org.hibernate.exception.SQLGrammarException: could not execute query org.springframework.dao.InvalidDataAccessResourceUsageException: could not execute query; nested exception is org.hibernate.exception.SQLGrammarException: could not execute query at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:613) at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412) at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:378) at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:847) at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:839) at com.totalbanco.basico.dao.hibernate.ReferenciaMonetariaHibernateDAO.comboMoedasAtivas(ReferenciaMonetariaHibernateDAO.java:63) at com.totalbanco.basico.service.ReferenciaMonetariaServiceImpl.comboMoedasAtivas(ReferenciaMonetariaServiceImpl.java:66) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:301) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:198) at $Proxy38.comboMoedasAtivas(Unknown Source) at com.totalbanco.basa.comum.service.RelatorioConfiguradoUtilsServiceImpl.comboMoedasAtivas(RelatorioConfiguradoUtilsServiceImpl.java:49) at com.totalbanco.basa.contabilidade.web.tag.MCListasTag.executar(MCListasTag.java:298)

Pois bem, esse Combo Moedas, executa uma HQL que jah peguei e executei no Banco o que o Hibernate me gera… Ele retorna vazio, pois a Tabela ainda nao estah povoada… mas nao da erro… Fui na classe e a mesma estah dentro de uma Lib do Frame da empresa, onde nao tenho acesso para alterar, mas posso consultar… Pois bem, o mapeamento da Tabela estah assim:

@Entity
@Table(name="T400RMON")
public class ReferenciaMonetaria implements Serializable {
	
    @Id
	@Column(name="SG_REF_MON")
	private String sgRefMon;

	@Column(name="DT_PNU_COT")
	private Date dtPnuCot;

	@Column(name="DT_ULT_COT")
	private Date dtUltCot;

	@Column(name="DT_FIM_VIG")
	private Date dtFimVig;

	@Column(name="CD_MDA_BCN")
	private Long cdMdaBcn;

	@Column(name="ID_SIT")
	private String idSit;

	@Column(name="ID_PR_PAD")
	private String idPrPad;

	@Column(name="ID_REF")
	private String idRef;

	@Column(name="SG_ORG_RSP")
	private String sgOrgRsp;

	@Column(name="SG_ENT")
	private String sgEnt;

	@Column(name="ID_BAS_DFG")
	private String idBasDfg;

	@Column(name="SG_VLR_MRC")
	private String sgVlrMrc;

	@Column(name="CD_MOE_SCX")
	private Integer cdMoeScx;

	@Column(name="VR_ULT_COT")
	private BigDecimal vrUltCot;

	@Column(name="SG_REF_COB")
	private String sgRefCob;

	@Column(name="ID_BAS_PAD")
	private String idBasPad;

	@Column(name="VR_COT_PRD")
	private BigDecimal vrCotPrd;

	@Column(name="CD_USU_ATU")
	private String cdUsuAtu;

	@Column(name="ID_TP_PAD")
	private String idTpPad;

	@Column(name="VR_CNV_REA")
	private BigDecimal vrCnvRea;

	@Column(name="ID_FMA_TX")
	private String idFmaTx;

	@Column(name="DE_FRM_DRV")
	private String deFrmDrv;

	@Column(name="SG_PFL_RSP")
	private String sgPflRsp;

	@Column(name="SG_FLU_CXA")
	private String sgFluCxa;

	@Column(name="ID_DD")
	private String idDd;

	@Column(name="NR_CSA_DEC")
	private Integer nrCsaDec;

	@Column(name="QT_BAS_DFG")
	private Integer qtBasDfg;

	@Column(name="SG_REF_PROJ")
	private String sgRefProj;

	@Column(name="DE_FRM_FEC")
	private String deFrmFec;

	@Column(name="DT_INI_VIG")
	private Date dtIniVig;

	@Column(name="DH_ATU")
	private java.util.Date dhAtu;

	@Column(name="PC_VAR_MAX")
	private BigDecimal pcVarMax;

	@Column(name="QT_DD_INF")
	private Integer qtDdInf;

	@Column(name="VR_PNU_COT")
	private BigDecimal vrPnuCot;

	@Column(name="CD_PAD_FBB")
	private String cdPadFbb;

	@Column(name="NM_PAD")
	private String nmPad;

	@Column(name="ID_ARD")
	private String idArd;

	@ManyToOne
	@JoinColumn(name="SG_PAD_SBT")
	private ReferenciaMonetaria substituicao;

	@ManyToOne
	@JoinColumn(name="SG_PAD_REF")
	private ReferenciaMonetaria referencia;

	@OneToMany(mappedBy="substituicao")
	private Set&lt;ReferenciaMonetaria&gt; substituicaoCollection;

	@OneToMany(mappedBy="referencia")
	private Set&lt;ReferenciaMonetaria&gt; referenciaCollection;

e a Tabela estah assim:

create table T400RMON
(
  SG_REF_MON  CHAR(10) not null,
  SG_ENT      CHAR(10),
  NM_PAD      CHAR(45),
  ID_TP_PAD   CHAR(1),
  ID_PR_PAD   CHAR(1),
  ID_BAS_PAD  CHAR(1),
  ID_FMA_TX   CHAR(1),
  SG_PAD_REF  CHAR(10),
  CD_PAD_FBB  CHAR(2),
  CD_MOE_SCX  NUMBER(5),
  PC_VAR_MAX  NUMBER(14,7),
  VR_ULT_COT  NUMBER(20,10),
  DT_ULT_COT  DATE,
  VR_PNU_COT  NUMBER(20,10),
  DT_PNU_COT  DATE,
  VR_CNV_REA  NUMBER(18,2),
  ID_ARD      CHAR(1),
  NR_CSA_DEC  NUMBER(5),
  SG_PAD_SBT  CHAR(10),
  DT_INI_VIG  DATE,
  DT_FIM_VIG  DATE,
  QT_DD_INF   NUMBER(5),
  SG_ORG_RSP  CHAR(20),
  SG_PFL_RSP  CHAR(15),
  DE_FRM_FEC  VARCHAR2(255),
  DE_FRM_DRV  VARCHAR2(255),
  ID_BAS_DFG  CHAR(2),
  QT_BAS_DFG  NUMBER(5),
  ID_REF      CHAR(1),
  ID_DD       CHAR(1),
  VR_COT_PRD  NUMBER(20,10),
  SG_VLR_MRC  CHAR(10),
  SG_FLU_CXA  CHAR(10),
  CD_MDA_BCN  NUMBER(10),
  SG_REF_PROJ CHAR(10),
  SG_REF_COB  VARCHAR2(10),
  ID_SIT      CHAR(1),
  CD_USU_ATU  CHAR(15),
  DH_ATU      DATE
)

Nao sei, mas estou desconfiando dessa Data do Campo dhAtu ??? Nao seria ela qe estah me dando essa dor de cabeca ???

fico grato pela atencao de todos…

Att.

mrrbigu

O dao fecha a sessão após salvar os dados?

Criado 1 de fevereiro de 2008
Ultima resposta 16 de mar. de 2010
Respostas 5
Participantes 6