Pessoal,
Gostaria de saber se é possível fazer a geração de sequences por anotação, sem ter que criar manualmente no banco?
aguardo resposta
Pessoal,
Gostaria de saber se é possível fazer a geração de sequences por anotação, sem ter que criar manualmente no banco?
aguardo resposta
Depende… sua dúvida é referente a JDBC ou JPA?
Como assim?
O que eu não quero é ter que ir no postgre e criar as sequence manualmente, uma a uma, porque se eu tiver mil sequence é muito trabalho criá-las manualmente. Então, pensei que poderia haver uma forma de criá-las automaticamente. Pesquisando pela net, descobrir que existe uma anotação que aparentemente faz isso, é a @SequenceGenerator. Só que tentei fazer por ela e ocorre um erro.
estou fazendo assim:
@Id
@SequenceGenerator(name = "cadastro_seq", sequenceName = "cadastro_seq")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="cadastro_seq")
public Integer getCo_cadastro_pk() {
return co_cadastro_pk;
}
e o erro que ocorre é:
ERROR: relation “cadastro_seq” does not exist
Nao… sequencegenerator nao é pra criar sequence no banco nao…
É só pra indicar que … seu id vai usar um gerador de chave que é um sequence… mais ou menos assim…
Gerando tabelas automaticamente no banco de dados (Gera o sequence também)
http://www.nextframework.org/site/294/tutorial/gerando-tabelas-automaticamente-no-banco-de-dados
entao rogelGarcia,
eu estou usando jpa como ficaria no persistence.xml?
malbarbosa, seu primeiro post estava muito confuso. Entendi o que você queria, que é ter sequence ao invés de fazer select manual. Porém é importante saber se você usa algum framework na persistência ou JDBC mesmo.
Já que você usa JPA, o código que você mandou está correto. Porém a mensagem de erro é clara, seu sequence não existe, você precisa criá-lo.
Oi garcia-jj,
é eu vi isso, e criei manualmente mesmo.
agora está aparecendo outro erro.
espero que possa me ajudar.
o erro é o seguinte:
Entrada em lote 0 insert into (aqui são os campos da tabela) values (os valores) foi abortada. Chame getNextException para ver a causa.
Entao… chame o getNextException para ver a causa…
entao rogelGarcia,
eu estou usando jpa como ficaria no persistence.xml?
Como implementacao vc deve estar usando o hibernate…
Coloca a propriedade do tutorial… que vai fazer com que o hibernate gere as tabelas e sequences…
Hmm, é bom você analisar essa exception. A mensagem agora não diz nada que possa ajudar. Veja lá no final da exception o que está acontecendo e cole aqui;
Aparece assim:
Caused by: java.sql.BatchUpdateException: Entrada em lote 0 insert into siabmtb001_cadastro (dt_cadastro, co_nis, co_cadastro_pk) values (2010-03-24 11:56:37.376000 -03:00:00, [telefone removido], 300) foi abortada. Chame getNextException para ver a causa.
at org.postgresql.jdbc2.AbstractJdbc2Statement$BatchResultHandler.handleError(AbstractJdbc2Statement.java:2534)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1328)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:352)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:2596)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:247)
... 17 more
27898 [main] DEBUG org.springframework.orm.jpa.JpaTransactionManager - Rolling back JPA transaction on EntityManager [org.hibernate.ejb.EntityManagerImpl@1816fb6]
27899 [main] DEBUG org.springframework.orm.jpa.JpaTransactionManager - Closing JPA EntityManager [org.hibernate.ejb.EntityManagerImpl@1816fb6] after transaction
27899 [main] DEBUG org.springframework.orm.jpa.EntityManagerFactoryUtils - Closing JPA EntityManager
Tem coisa errada nessa exception. Mande a exception inteira como anexo (não copie e cole no editor porque fica muito pesado). Assim posso entender melhor o erro.
Abraços
O problema é que nao tá mostrando o nextException no log
Veja se em outra parte do log tem outras mensagens…
Essas é toda a excessão, incluindo um pequena parte do debug que acho que poder ser interessante você ver.
20903 [main] DEBUG org.springframework.orm.jpa.JpaTransactionManager - Exposing JPA transaction as JDBC transaction [SimpleConnectionHandle: org.postgresql.jdbc3.Jdbc3Connection@9e5e21]
Hibernate: select nextval ('cadastro_seq')
21517 [main] DEBUG org.springframework.orm.jpa.JpaTransactionManager - Initiating transaction commit
21517 [main] DEBUG org.springframework.orm.jpa.JpaTransactionManager - Committing JPA transaction on EntityManager [org.hibernate.ejb.EntityManagerImpl@199f755]
Hibernate: insert into siabmtb001_cadastro (dt_cadastro, co_nis, co_cadastro_pk) values (?, ?, ?)
21165 [main] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 0, SQLState: null
21165 [main] ERROR org.hibernate.util.JDBCExceptionReporter - Entrada em lote 0 insert into siabmtb001_cadastro (dt_cadastro, co_nis, co_cadastro_pk) values (2010-03-24 14:18:31.853000 -03:00:00, [telefone removido], 17) foi abortada. Chame getNextException para ver a causa.
21165 [main] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 0, SQLState: 42P01
21165 [main] ERROR org.hibernate.util.JDBCExceptionReporter - ERROR: relation "siabmtb001_cadastro" does not exist
21165 [main] ERROR org.hibernate.event.def.AbstractFlushingEventListener - Could not synchronize database state with session
org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:266)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:365)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:54)
at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:456)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:732)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:701)
at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:321)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:116)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy25.insertCadastro(Unknown Source)
at br.gov.caixa.seguranca.siabm.persistence.dao.impl.CadastroDaoImpl.main(CadastroDaoImpl.java:50)
Caused by: java.sql.BatchUpdateException: Entrada em lote 0 insert into siabmtb001_cadastro (dt_cadastro, co_nis, co_cadastro_pk) values (2010-03-24 14:18:31.853000 -03:00:00, [telefone removido], 17) foi abortada. Chame getNextException para ver a causa.
at org.postgresql.jdbc2.AbstractJdbc2Statement$BatchResultHandler.handleError(AbstractJdbc2Statement.java:2534)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1328)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:352)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:2596)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
... 17 more
21548 [main] DEBUG org.springframework.orm.jpa.JpaTransactionManager - Initiating transaction rollback after commit exception
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:630)
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:92)
at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:460)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:732)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:701)
at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:321)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:116)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy25.insertCadastro(Unknown Source)
at br.gov.caixa.seguranca.siabm.persistence.dao.impl.CadastroDaoImpl.main(CadastroDaoImpl.java:50)
Caused by: org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:266)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:365)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:54)
at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:456)
... 8 more
Caused by: java.sql.BatchUpdateException: Entrada em lote 0 insert into siabmtb001_cadastro (dt_cadastro, co_nis, co_cadastro_pk) values (2010-03-24 14:18:31.853000 -03:00:00, [telefone removido], 17) foi abortada. Chame getNextException para ver a causa.
at org.postgresql.jdbc2.AbstractJdbc2Statement$BatchResultHandler.handleError(AbstractJdbc2Statement.java:2534)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1328)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:352)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:2596)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
... 17 more
21549 [main] DEBUG org.springframework.orm.jpa.JpaTransactionManager - Rolling back JPA transaction on EntityManager [org.hibernate.ejb.EntityManagerImpl@199f755]
21549 [main] DEBUG org.springframework.orm.jpa.JpaTransactionManager - Closing JPA EntityManager [org.hibernate.ejb.EntityManagerImpl@199f755] after transaction
21549 [main] DEBUG org.springframework.orm.jpa.EntityManagerFactoryUtils - Closing JPA EntityManager
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:630)
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:92)
at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:460)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:732)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:701)
at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:321)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:116)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy25.insertCadastro(Unknown Source)
at br.gov.caixa.seguranca.siabm.persistence.dao.impl.CadastroDaoImpl.main(CadastroDaoImpl.java:50)
Caused by: org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:266)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:365)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:54)
at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:456)
... 8 more
Caused by: java.sql.BatchUpdateException: Entrada em lote 0 insert into siabmtb001_cadastro (dt_cadastro, co_nis, co_cadastro_pk) values (2010-03-24 14:18:31.853000 -03:00:00, [telefone removido], 17) foi abortada. Chame getNextException para ver a causa.
at org.postgresql.jdbc2.AbstractJdbc2Statement$BatchResultHandler.handleError(AbstractJdbc2Statement.java:2534)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1328)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:352)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:2596)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
... 17 more
Tá dando erro de gramática… q coisa…
posta o código que vc usou pra salvar…
Não existe essa tabela:
É isso mesmo que o garcia falou… (nem tinha visto :D)
É tanto stacktrace que passa despercebido.
Uma coisa é você ativar o update-ddl conforme o Rógel falou. Isso é bacana porque o hibernate irá sempre verificar a estrutura do banco e pode atualizar para você. No caso se algum objeto não for encontrado (seja banco, sequence ou colunas) ele irá criar.
Pessoal,
acho que o erro aqui é um que está aparecendo logo no início:
DEBUG org.hibernate.util.JDBCExceptionReporter - Could not execute JDBC batch update [insert into siabmtb001_cliente (dt_cadastro, co_nis, co_cliente_pk) values (?, ?, ?)]
o que vocês acham?
Roda o sql no banco e ve o que acontece…
A mensagem é clara, não existe a tabela no banco. O ideal é você verificar se todas as tabelas estão criadas.