Estou tendo dificuldades em conseguir mapear meu banco postgres, principalmente em relação as constraints
Quando é um campo de auto-incremento devo utilizar qual strategy no @GeneretedValue?
Estava utilizando strategy = “GenerationType.SEQUENCE”, como abaixo:
@Entity
@Table(name="Pessoa")
public class Pessoa implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@SequenceGenerator(name="PESSOA_ID_GENERATOR", sequenceName="Pessoa_id_seq" )
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="PESSOA_ID_GENERATOR")
private Integer id;
mas isto dava erro, dizendo que nao encontrava a sequenceName=“Pessoa_id_seq”, (e é claro q no banco estava desta maneira)
Passei a utilizar outro tipo de geração de sequenciador…
@Entity
@Table(name="Pessoa")
public class Pessoa implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@SequenceGenerator(name="seq", sequenceName="Pessoa_id_seq")
@GeneratedValue(strategy=GenerationType.AUTO, generator="seq")
private Integer id;
mas agora estou recebendo outro erro
Exception in thread "main" javax.persistence.RollbackException: Error while committing the transaction
at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:93)
at main.main(main.java:21)
Caused by: javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1214)
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1147)
at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:81)
... 1 more
Caused by: org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:92)
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:268)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:184)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:383)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:133)
at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:76)
... 1 more
Caused by: java.sql.BatchUpdateException: Entrada em lote 0 insert into Pessoa (nome, id) values ('name', '10') foi abortada. Chame getNextException para ver a causa.
at org.postgresql.jdbc2.AbstractJdbc2Statement$BatchResultHandler.handleError(AbstractJdbc2Statement.java:2586)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1811)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:407)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:2725)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
Estou perdido nesta parte…
se alguem puder me ajudar agradeço…
então… essa era a maneira como eu estava fazendo na primeira vez…
onde sempre tinha o retorno da exception q nao encontrava a sequence do banco…
Será que passei batido em alguma coisa nas configurações?..
assim, o que fiz foi:
1.criei um projeto (dynamic web project) com todas as libs e talz…
2.configurei o persistence.xml de acordo com o hibernate
3.mapeei as entidades
mas na hora de executar a persistencia dava este erro…
iria falar que estou meio perdido, mas estou bem perdido…
Exception in thread "main" javax.persistence.PersistenceException: [PersistenceUnit: avc] Unable to configure EntityManagerFactory
at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:375)
at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:56)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:48)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:32)
at main.main(main.java:11)
Caused by: org.hibernate.AnnotationException: Unknown Id.generator: seq
at org.hibernate.cfg.BinderHelper.makeIdGenerator(BinderHelper.java:506)
at org.hibernate.cfg.AnnotationBinder.processId(AnnotationBinder.java:2176)
at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:2088)
at org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:796)
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:707)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:4008)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3962)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1371)
at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1348)
at org.hibernate.ejb.Ejb3Configuration.buildMappings(Ejb3Configuration.java:1492)
at org.hibernate.ejb.EventListenerConfigurator.configure(EventListenerConfigurator.java:193)
at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:1070)
at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:279)
at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:363)
... 4 more
cara, eu tenho um sistema aqui onde trabalho, e usávamos SQLServer 2005, mas dai precisamos mudar para postgres, e eu simplesmente não alterei nada, nada mesmo. então o GenerationType que eu estava usando era o IDENTITY.
exemplo:
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
tenta ai e vê se dá certo.
[quote=ronnytds]cara, eu tenho um sistema aqui onde trabalho, e usávamos SQLServer 2005, mas dai precisamos mudar para postgres, e eu simplesmente não alterei nada, nada mesmo. então o GenerationType que eu estava usando era o IDENTITY.
exemplo:
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
tenta ai e vê se dá certo.[/quote]
Ainda nada…
a seguir o console:
Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not insert: [Pessoa]
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1214)
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1147)
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1153)
at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:678)
at main.main(main.java:20)
Caused by: org.hibernate.exception.SQLGrammarException: could not insert: [Pessoa]
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:92)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:64)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2345)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2852)
at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:71)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:320)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:203)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:129)
at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:69)
at org.hibernate.event.def.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:179)
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:135)
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:61)
at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:808)
at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:782)
at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:786)
at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:672)
... 1 more
Caused by: org.postgresql.util.PSQLException: ERRO: relação "pessoa" não existe
Posição: 13
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2077)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1810)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:498)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:386)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:332)
at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:94)
at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:57)
... 16 more