Could not fetch initial value

13 respostas
M

olahH

tenhu um VO simples…com um id do tipo Integer…configurei o xml bunitinhu…mas ele tah lançando as exceptions a seguir qnd vou inserir

Exception in thread "main" org.hibernate.exception.GenericJDBCException: could not fetch initial value at org.hibernate.exception.ErrorCodeConverter.handledNonSpecificException(ErrorCodeConverter.java:92) at org.hibernate.exception.ErrorCodeConverter.convert(ErrorCodeConverter.java:80) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) at org.hibernate.id.IncrementGenerator.getNext(IncrementGenerator.java:90) at org.hibernate.id.IncrementGenerator.generate(IncrementGenerator.java:43) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:85) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:184) at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:173) at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:69) at org.hibernate.impl.SessionImpl.save(SessionImpl.java:429) at org.hibernate.impl.SessionImpl.save(SessionImpl.java:424) at dot.Main.main(Main.java:67) Caused by: java.sql.SQLException: An SQLException was provoked by the following failure: java.lang.NullPointerException at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:68) at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:57) at com.mchange.v2.c3p0.stmt.GooGooStatementCache$2.run(GooGooStatementCache.java:343) at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:354) Caused by: java.lang.NullPointerException at com.mysql.jdbc.PreparedStatement.asSql(PreparedStatement.java:562) at com.mysql.jdbc.PreparedStatement.asSql(PreparedStatement.java:504) at com.mysql.jdbc.PreparedStatement.toString(PreparedStatement.java:3228) at java.lang.String.valueOf(String.java:2577) at java.lang.StringBuffer.append(StringBuffer.java:220) at com.mysql.jdbc.trace.Tracer.printParameters(Tracer.aj:240) at com.mysql.jdbc.trace.Tracer.printEntering(Tracer.aj:167) at com.mysql.jdbc.trace.Tracer.entry(Tracer.aj:126) at com.mysql.jdbc.trace.Tracer.ajc$before$com_mysql_jdbc_trace_Tracer$1$f51c62b8(Tracer.aj:45) at com.mysql.jdbc.Connection.registerStatement(Connection.java) at com.mysql.jdbc.Statement.<init>(Statement.java:190) at com.mysql.jdbc.PreparedStatement.<init>(PreparedStatement.java:429) at com.mysql.jdbc.Connection.clientPrepareStatement(Connection.java:2063) at com.mysql.jdbc.Connection.clientPrepareStatement(Connection.java:1996) at com.mysql.jdbc.Connection.prepareStatement(Connection.java:4266) at com.mysql.jdbc.Connection.prepareStatement(Connection.java:4185) 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 com.mchange.v2.c3p0.stmt.GooGooStatementCache$2.run(GooGooStatementCache.java:333)

acho q deve ser alguma coisa com o id…mas num tah dando…alguem pode me dar uma luz???

13 Respostas

A

Cara olha o generate do seu xml!
tipo:
<generator class=“assigned”/>
Ele deve estar de um jeito no hbm e de ooutro no banco!
Tipo que vc ta falando na xml que o campo id esta com autoincremente e ele nao esta no banco assim.
Se não resolver
Posta seu HBm ai!

M
&lt;!DOCTYPE hibernate-mapping PUBLIC 
&quot;-//Hibernate/Hibernate Configuration DTD 3.0//EN&quot; 
&quot;http&#58;//hibernate.sourceforge.net/hibernate-mapping-3.0.dtd&quot;&gt;

&lt;hibernate-mapping&gt;

&lt;class name=&quot;dot.modelo.cartao&quot; table=&quot;cartao&quot;&gt;

&lt;id name=&quot;id&quot;&gt;
        &lt;generator class=&quot;increment&quot;/&gt;
&lt;/id&gt;

&lt;property name=&quot;dia&quot; column=&quot;dia&quot;/&gt;
&lt;property name=&quot;entrada&quot; column=&quot;entrada&quot;/&gt;
&lt;property name=&quot;retInt&quot; column=&quot;retint&quot;/&gt;
&lt;property name=&quot;saida&quot; column=&quot;saida&quot;/&gt;
&lt;property name=&quot;th&quot; column=&quot;th&quot;/&gt;

&lt;/class&gt;
&lt;/hibernate-mapping&gt;

meu id:

primary key, not null, tinyint(3), auto increment

A

Muda o <generator class=“increment”/>
para assigned, ou deixa em branco!

M

parece q o problema do id foi resolvido.....mas ele tah dando nullpointerexception

Hibernate&#58; /*insert dot.modelo.doxo*/insert into doxo &#40;doxo, lol, id&#41; values &#40;?, ?, ?&#41;
Exception in thread &quot;main&quot; org.hibernate.exception.GenericJDBCException&#58; could not insert&#58; &#91;dot.modelo.doxo&#93;
    at org.hibernate.exception.ErrorCodeConverter.handledNonSpecificException&#40;ErrorCodeConverter.java&#58;92&#41;
    at org.hibernate.exception.ErrorCodeConverter.convert&#40;ErrorCodeConverter.java&#58;80&#41;
    at org.hibernate.exception.JDBCExceptionHelper.convert&#40;JDBCExceptionHelper.java&#58;43&#41;
    at org.hibernate.persister.entity.BasicEntityPersister.insert&#40;BasicEntityPersister.java&#58;1839&#41;
    at org.hibernate.persister.entity.BasicEntityPersister.insert&#40;BasicEntityPersister.java&#58;2171&#41;
    at org.hibernate.action.EntityInsertAction.execute&#40;EntityInsertAction.java&#58;46&#41;
    at org.hibernate.engine.ActionQueue.execute&#40;ActionQueue.java&#58;239&#41;
    at org.hibernate.engine.ActionQueue.executeActions&#40;ActionQueue.java&#58;223&#41;
    at org.hibernate.engine.ActionQueue.executeActions&#40;ActionQueue.java&#58;136&#41;
    at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions&#40;AbstractFlushingEventListener.java&#58;274&#41;
    at org.hibernate.event.def.DefaultFlushEventListener.onFlush&#40;DefaultFlushEventListener.java&#58;27&#41;
    at org.hibernate.impl.SessionImpl.flush&#40;SessionImpl.java&#58;669&#41;
    at org.hibernate.impl.SessionImpl.managedFlush&#40;SessionImpl.java&#58;293&#41;
    at org.hibernate.transaction.JDBCTransaction.commit&#40;JDBCTransaction.java&#58;86&#41;
    at dot.Main.main&#40;Main.java&#58;70&#41;
Caused by&#58; java.sql.SQLException&#58; An SQLException was provoked by the following failure&#58; java.lang.NullPointerException
    at com.mchange.v2.sql.SqlUtils.toSQLException&#40;SqlUtils.java&#58;68&#41;
    at com.mchange.v2.sql.SqlUtils.toSQLException&#40;SqlUtils.java&#58;57&#41;
    at com.mchange.v2.c3p0.stmt.GooGooStatementCache$2.run&#40;GooGooStatementCache.java&#58;343&#41;
    at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run&#40;ThreadPoolAsynchronousRunner.java&#58;354&#41;
Caused by&#58; java.lang.NullPointerException
    at com.mysql.jdbc.PreparedStatement.asSql&#40;PreparedStatement.java&#58;562&#41;
    at com.mysql.jdbc.PreparedStatement.asSql&#40;PreparedStatement.java&#58;504&#41;
    at com.mysql.jdbc.PreparedStatement.toString&#40;PreparedStatement.java&#58;3228&#41;
    at java.lang.String.valueOf&#40;String.java&#58;2577&#41;
    at java.lang.StringBuffer.append&#40;StringBuffer.java&#58;220&#41;
    at com.mysql.jdbc.trace.Tracer.printParameters&#40;Tracer.aj&#58;240&#41;
    at com.mysql.jdbc.trace.Tracer.printEntering&#40;Tracer.aj&#58;167&#41;
    at com.mysql.jdbc.trace.Tracer.entry&#40;Tracer.aj&#58;126&#41;
    at com.mysql.jdbc.trace.Tracer.ajc$before$com_mysql_jdbc_trace_Tracer$1$f51c62b8&#40;Tracer.aj&#58;45&#41;
    at com.mysql.jdbc.Connection.registerStatement&#40;Connection.java&#41;
    at com.mysql.jdbc.Statement.&lt;init&gt;&#40;Statement.java&#58;190&#41;
    at com.mysql.jdbc.PreparedStatement.&lt;init&gt;&#40;PreparedStatement.java&#58;429&#41;
    at com.mysql.jdbc.Connection.clientPrepareStatement&#40;Connection.java&#58;2063&#41;
    at com.mysql.jdbc.Connection.clientPrepareStatement&#40;Connection.java&#58;1996&#41;
    at com.mysql.jdbc.Connection.prepareStatement&#40;Connection.java&#58;4266&#41;
    at com.mysql.jdbc.Connection.prepareStatement&#40;Connection.java&#58;4185&#41;
    at sun.reflect.NativeMethodAccessorImpl.invoke0&#40;Native Method&#41;
    at sun.reflect.NativeMethodAccessorImpl.invoke&#40;NativeMethodAccessorImpl.java&#58;39&#41;
    at sun.reflect.DelegatingMethodAccessorImpl.invoke&#40;DelegatingMethodAccessorImpl.java&#58;25&#41;
    at java.lang.reflect.Method.invoke&#40;Method.java&#58;585&#41;
    at com.mchange.v2.c3p0.stmt.GooGooStatementCache$2.run&#40;GooGooStatementCache.java&#58;333&#41;
    ... 1 more

eu fis ateh um otro VO pa testa....mas tah dando a mesma coisa...

pa salva eu to fz assim

Session sessao = HibernateUtility.getSession&#40;&#41;;
        Transaction transaction = sessao.beginTransaction&#40;&#41;;
               
        doxo d = new doxo&#40;&#41;;  
        d.setDoxo&#40;&quot;doOOXOXO&quot;&#41;;
        d.setLol&#40;&quot;lOOOOLll&quot;&#41;;


        sessao.save&#40;d&#41;;
        
        transaction.commit&#40;&#41;;
        sessao.close&#40;&#41;;
A

Cara, ta melhorando, faz um teste, atribui um valor pro id tb!
Mesmo que ele gere sozinho, só para nao dar nullpointerException!

M

eu jah tentei…num funciono…mas eu coloquei o log4j e olha só

2005-08-18 10&#58;49&#58;48,468 WARN hibernate.util.JDBCExceptionReporter -&gt; SQL Error&#58; 0, SQLState&#58; null 2005-08-18 10&#58;49&#58;48,468 ERROR hibernate.util.JDBCExceptionReporter -&gt; An SQLException was provoked by the following failure&#58; java.lang.NullPointerException 2005-08-18 10&#58;49&#58;48,468 ERROR event.def.AbstractFlushingEventListener -&gt; Could not synchronize database state with session

2005-08-18 10&#58;49&#58;48,359 DEBUG MySQL -&gt; &lt;-- RowDataStatic.java&#58;89 com.mysql.jdbc.RowDataStatic.close&#40;..&#41; returning null 2005-08-18 10&#58;49&#58;48,359 DEBUG MySQL -&gt; &lt;-- ResultSet.java&#58;6319 com.mysql.jdbc.ResultSet.realClose&#40;..&#41; returning null 2005-08-18 10&#58;49&#58;48,359 DEBUG MySQL -&gt; &lt;-- ResultSet.java&#58;715 com.mysql.jdbc.ResultSet.close&#40;..&#41; returning null 2005-08-18 10&#58;49&#58;48,359 DEBUG hibernate.util.JDBCExceptionReporter -&gt; SQL Exception

M

boOMMM eu resolvi o problema acima…era a conf. do c3p0 do cfg.xml…

mas agora tah dando nullpointerexcetion no transaction.commit();.,…puta briga com esse hibernate…lol…mas eu vou persistir mais do q ele AUHEuaheuahaue…

intaum…alguem sabe o q pode ser??

A

Nao desiste nao, depois da primeira transação gravando o resto vai de vento e poupa!

Posta o log do ultimo erro ai!!

M

Fri Aug 19 08&#58;35&#58;10 BRT 2005 TRACE&#58; Fri Aug 19 08&#58;35&#58;10 BRT 2005 TRACE&#58; Hibernate&#58; /* insert dot.modelo.doxo */ insert into doxo &#40;doxo, lol, id&#41; values &#40;?, ?, ?&#41; Exception in thread &quot;main&quot; java.lang.NullPointerException at com.mysql.jdbc.PreparedStatement.asSql&#40;PreparedStatement.java&#58;562&#41; at com.mysql.jdbc.PreparedStatement.asSql&#40;PreparedStatement.java&#58;504&#41; at com.mysql.jdbc.PreparedStatement.toString&#40;PreparedStatement.java&#58;3228&#41; at java.lang.String.valueOf&#40;String.java&#58;2577&#41; at java.lang.StringBuffer.append&#40;StringBuffer.java&#58;220&#41; at com.mysql.jdbc.trace.Tracer.printParameters&#40;Tracer.aj&#58;240&#41; at com.mysql.jdbc.trace.Tracer.printEntering&#40;Tracer.aj&#58;167&#41; at com.mysql.jdbc.trace.Tracer.entry&#40;Tracer.aj&#58;126&#41; at com.mysql.jdbc.trace.Tracer.ajc$before$com_mysql_jdbc_trace_Tracer$1$f51c62b8&#40;Tracer.aj&#58;45&#41; at com.mysql.jdbc.Connection.registerStatement&#40;Connection.java&#41; at com.mysql.jdbc.Statement.&lt;init&gt;&#40;Statement.java&#58;190&#41; at com.mysql.jdbc.PreparedStatement.&lt;init&gt;&#40;PreparedStatement.java&#58;429&#41; at com.mysql.jdbc.Connection.clientPrepareStatement&#40;Connection.java&#58;2063&#41; at com.mysql.jdbc.Connection.clientPrepareStatement&#40;Connection.java&#58;1996&#41; at com.mysql.jdbc.Connection.prepareStatement&#40;Connection.java&#58;4266&#41; at com.mysql.jdbc.Connection.prepareStatement&#40;Connection.java&#58;4185&#41; at com.mchange.v2.c3p0.impl.NewProxyConnection.prepareStatement&#40;NewProxyConnection.java&#58;189&#41; at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement&#40;AbstractBatcher.java&#58;396&#41; at org.hibernate.jdbc.AbstractBatcher.prepareStatement&#40;AbstractBatcher.java&#58;76&#41; at org.hibernate.jdbc.AbstractBatcher.prepareStatement&#40;AbstractBatcher.java&#58;69&#41; at org.hibernate.jdbc.AbstractBatcher.prepareBatchStatement&#40;AbstractBatcher.java&#58;150&#41; at org.hibernate.persister.entity.BasicEntityPersister.insert&#40;BasicEntityPersister.java&#58;1839&#41; at org.hibernate.persister.entity.BasicEntityPersister.insert&#40;BasicEntityPersister.java&#58;2200&#41; at org.hibernate.action.EntityInsertAction.execute&#40;EntityInsertAction.java&#58;46&#41; at org.hibernate.engine.ActionQueue.execute&#40;ActionQueue.java&#58;239&#41; at org.hibernate.engine.ActionQueue.executeActions&#40;ActionQueue.java&#58;223&#41; at org.hibernate.engine.ActionQueue.executeActions&#40;ActionQueue.java&#58;136&#41; at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions&#40;AbstractFlushingEventListener.java&#58;274&#41; at org.hibernate.event.def.DefaultFlushEventListener.onFlush&#40;DefaultFlushEventListener.java&#58;27&#41; at org.hibernate.impl.SessionImpl.flush&#40;SessionImpl.java&#58;730&#41; at dot.Main.main&#40;Main.java&#58;76&#41; Fri Aug 19 08&#58;35&#58;10 BRT 2005 TRACE&#58; Fri Aug 19 08&#58;35&#58;11 BRT 2005 TRACE&#58;

76        session.flush&#40;&#41;;
77        tx.commit&#40;&#41;;
78        session.close&#40;&#41;;
A

Cara,

olha meu metodo commit:

protected void commit&#40;Session sess, Transaction tx&#41; throws Exception &#123;

logF.debug&#40;"#################### Entrou no evento commit"&#41;;
		
Exception exc = new Exception&#40;&#41;;
String msg = "";
		
try &#123;

sess.flush&#40;&#41;;
  if &#40; tx != null &#41; &#123;
          tx.commit&#40;&#41;;       
         aposChamarBO&#40;sess&#41;; 
			  &#125;
       logF.debug&#40;"############# Commit ok"&#41;;
       if &#40;logTempoTransacao.isDebugEnabled&#40;&#41;&#41; 
	logTempoTransacao.debug&#40;"Fez commit em "+ new java.util.Date&#40;&#41;&#41;;		
			
	&#125; catch &#40;JDBCException e1&#41; &#123;
			log.fatal&#40;"Erro SQL ao tentar gravar&#58; " + e1&#41;;
			msg="erros.sql.geral";
			exc = e1;
		&#125; catch &#40;HibernateException e2&#41; &#123;
			log.fatal&#40;"Erro Hibernate ao tentar gravar&#58; " + e2&#41;;
	exc = e2;
			msg="erros.hibernate.geral";
		&#125; catch &#40;Exception e&#41; &#123;
			log.error&#40;"Erro Geral ao tentar gravar&#58; " +e,e&#41;;
			e.printStackTrace&#40;&#41;;
			exc = e;
			msg="erros.persistencia.geral";
		&#125; 

		try &#123;
				
	       // Setando o autoCommit para falso devido a erro com o mysql
	       // se a transacao for nula entao considera que o objeto esta sendo
	       // com CMP
	      if &#40;tx!=null&#41; 
	      	  sess.connection&#40;&#41;.setAutoCommit&#40;false&#41;;
			
		  if &#40;tx!=null&#41; tx.rollback&#40;&#41;;
		
		    Connection con = sess.close&#40;&#41;;
			
// Muda autocommit para true para atender ao websphere
// TODO Precisa ser homologado com demais App Servers
			con.setAutoCommit&#40;true&#41;;
			con.close&#40;&#41;;
			
logF.debug&#40;"############# Fechou e devolveu conexao para o pool"&#41;;

 &#125; catch &#40;Exception ex&#41; &#123;
  log.fatal&#40;"Nao conseguiu devolver o pool para o App Server&#58;"+ex&#41;;
	msg="erros.persistencia.geral";
			exc=ex;
		&#125;	
	
	if &#40;!msg.equals&#40;""&#41;&#41; &#123;
			MsgErro erro = MsgErro.getInstance&#40;&#41;;
			throw erro.msg&#40;msg,new Object&#91;&#93; &#123;exc&#125;,exc&#41;;
		&#125;

		if &#40;logTempoTransacao.isDebugEnabled&#40;&#41;&#41; 
			logTempoTransacao.debug&#40;"Encerrou Classe&#58;"+this.getClass&#40;&#41;+" com commit em Tempo&#58;"&#41;;
		
	&#125;

É o mesmo que vc ta fazendo, agora acho melhor vc debugar mesmo!
O debug do eclipse é Exelente, colocando um breakPoint no commit(), vc consegue ver tudo, ate os sqls que irão rodar!
Olha o que ta chegando lá!

M

eu to usando o netBeans…e eu to dando o commit direto…tx.commit();

ele faz tudo certinho…se eu manda ele imprimir o id da transação ele imprime certinho…eh só na hora do commit mesmo…e acontece a mesma coisa com o flush…

Session sess = new HibernateUtil.getSession&#40;&#41;;
Transaction tx = sessi.beginTransaction&#40;&#41;;

doxo d = new doxo&#40;&#41;;

d.setDoxo&#40;"lOLLL"&#41;;
d.setLol&#40;"DoxoOO"&#41;;
d.setId&#40;1&#41;;

sess.save&#40;d&#41;;

tx.commit&#40;&#41;;
sess.close&#40;&#41;;
M

aEWWWWWWWWWWWWWWW…finalmente…passei po eclipse e funfo…só de passa po eclipse…nem debugei nada…

valew anderson…sem vc naum teria conseguido…mto obrigado pela ajuda… :grin: :grin:

A

É isso aê cara!
Tamo ai pra isso Mermo!!!
Flow!!

Criado 17 de agosto de 2005
Ultima resposta 23 de ago. de 2005
Respostas 13
Participantes 2