Como utilizar uma sequence no Hibernate+postgres

1 resposta
G

Pessoal estou com um problema na hora de gerar um Id para um cadastro!!!
a minha classe e essa ja que segue abaixo; utilizei algumas dicas de outros topicos mais não conssegui faze funcionar ainda, a sequence S_fornecedor ja esta criado no banco!! Se alguem puder me ajudar ficarei grato!!!

@Entity

@SequenceGenerator(name=Fid,sequenceName=S_fornecedor)

@Table(name = fornecedor)

@NamedQueries({@NamedQuery(name = Fornecedor.findAll, query = SELECT f FROM Fornecedor f), @NamedQuery(name = Fornecedor.findByForId, query = SELECT f FROM Fornecedor f WHERE f.forId = :forId), @NamedQuery(name = Fornecedor.findByForNome, query = SELECT f FROM Fornecedor f WHERE f.forNome = :forNome), @NamedQuery(name = Fornecedor.findByForCnpj, query = SELECT f FROM Fornecedor f WHERE f.forCnpj = :forCnpj), @NamedQuery(name = Fornecedor.findByForDescricao, query = SELECT f FROM Fornecedor f WHERE f.forDescricao = :forDescricao), @NamedQuery(name = Fornecedor.findByForRazaosocial, query = SELECT f FROM Fornecedor f WHERE f.forRazaosocial = :forRazaosocial), @NamedQuery(name = Fornecedor.findByForTelefone, query = SELECT f FROM Fornecedor f WHERE f.forTelefone = :forTelefone), @NamedQuery(name = Fornecedor.findByForEndereco, query = SELECT f FROM Fornecedor f WHERE f.forEndereco = :forEndereco)})

public class Fornecedor implements Serializable {

private static final long serialVersionUID = 1L;

@Id

<a class="mention" href="/u/basic">@Basic</a>(optional = false)

@GeneratedValue( strategy = GenerationType.SEQUENCE, generator = Fid)

@Column(name = for_id)

mais na hora de cadastrar um fornecedor da o seguinte erro:

INFO: building session factory

02/05/2009 20:58:16 org.hibernate.impl.SessionFactoryObjectFactory addInstance

INFO: Not binding factory to JNDI, no JNDI name configured

02/05/2009 20:58:16 org.hibernate.util.JDBCExceptionReporter logExceptions

WARNING: SQL Error: 0, SQLState: 42P01

02/05/2009 20:58:16 org.hibernate.util.JDBCExceptionReporter logExceptions

SEVERE: ERROR: relation s_fornecedor does not exist

javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not get next sequence value

at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:637)

at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:226)

at Interface.CADASTRO.CFornecedor.persist(CFornecedor.java:293)

at Interface.CADASTRO.CFornecedor.BSalvarActionPerformed(CFornecedor.java:244)

at Interface.CADASTRO.CFornecedor.access$200(CFornecedor.java:25)

at Interface.CADASTRO.CFornecedor$3.actionPerformed(CFornecedor.java:175)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)

at java.awt.Component.processMouseEvent(Component.java:6134)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)

at java.awt.Component.processEvent(Component.java:5899)

at java.awt.Container.processEvent(Container.java:2023)

at java.awt.Component.dispatchEventImpl(Component.java:4501)

at java.awt.Container.dispatchEventImpl(Container.java:2081)

at java.awt.Component.dispatchEvent(Component.java:4331)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4301)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3965)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3895)

at java.awt.Container.dispatchEventImpl(Container.java:2067)

at java.awt.Window.dispatchEventImpl(Window.java:2458)

at java.awt.Component.dispatchEvent(Component.java:4331)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:178)

at java.awt.Dialog$1.run(Dialog.java:1047)

at java.awt.Dialog$3.run(Dialog.java:1099)

at java.security.AccessController.doPrivileged(Native Method)

at java.awt.Dialog.show(Dialog.java:1097)

at java.awt.Component.show(Component.java:1447)

at java.awt.Component.setVisible(Component.java:1400)

at java.awt.Window.setVisible(Window.java:824)

at java.awt.Dialog.setVisible(Dialog.java:987)

at Interface.GerenciaFornecedor.BNovoActionPerformed(GerenciaFornecedor.java:198)

at Interface.GerenciaFornecedor.access$100(GerenciaFornecedor.java:20)

at Interface.GerenciaFornecedor$3.actionPerformed(GerenciaFornecedor.java:103)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)

at java.awt.Component.processMouseEvent(Component.java:6134)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)

at java.awt.Component.processEvent(Component.java:5899)

at java.awt.Container.processEvent(Container.java:2023)

at java.awt.Component.dispatchEventImpl(Component.java:4501)

at java.awt.Container.dispatchEventImpl(Container.java:2081)

at java.awt.Component.dispatchEvent(Component.java:4331)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4301)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3965)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3895)

at java.awt.Container.dispatchEventImpl(Container.java:2067)

at java.awt.Window.dispatchEventImpl(Window.java:2458)

at java.awt.Component.dispatchEvent(Component.java:4331)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:178)

at java.awt.Dialog$1.run(Dialog.java:1047)

at java.awt.Dialog$3.run(Dialog.java:1099)

at java.security.AccessController.doPrivileged(Native Method)

at java.awt.Dialog.show(Dialog.java:1097)

at java.awt.Component.show(Component.java:1447)

at java.awt.Component.setVisible(Component.java:1400)

at java.awt.Window.setVisible(Window.java:824)

at java.awt.Dialog.setVisible(Dialog.java:987)

at Interface.GerenciaFornecedor$7.run(GerenciaFornecedor.java:215)

at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Caused by: org.hibernate.exception.SQLGrammarException: could not get next sequence value

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

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

at org.hibernate.id.SequenceGenerator.generate(SequenceGenerator.java:96)

at org.hibernate.id.SequenceHiLoGenerator.generate(SequenceHiLoGenerator.java:58)

at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:99)

at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:49)

at org.hibernate.event.def.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:131)

at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:87)

at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:38)

at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:618)

at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:592)

at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:596)

at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:220)

 76 more

Caused by: org.postgresql.util.PSQLException: ERROR: relation s_fornecedor does not exist

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.executeQuery(AbstractJdbc2Statement.java:254)

at org.hibernate.id.SequenceGenerator.generate(SequenceGenerator.java:75)

1 Resposta

L

aparentemente tua sequence s_fornecedor nao existe no postgres

cara, segue ai um exemplo do sequence funcionando no hibernate, adpta ai conforme tua necessidade, mas esta bem parecido com o teu exemplo.

@SuppressWarnings("serial")
@Entity
@Table(name = "sys_user")
@SequenceGenerator(name = "seq_user", sequenceName = "seq_user")
public class User implements Serializable {
	
	@Id
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_user")
	private Long iduser;

...
Criado 2 de maio de 2009
Ultima resposta 3 de mai. de 2009
Respostas 1
Participantes 2