Hibernate

8 respostas
W

Aí pessoal

Dúvida com hibernate.

<generator class="native"> <param name="usuario">CorrespUsr</param> </generator>

Preciso saber o que eu coloco no lugar do CorrespUsr, e no lugar do usuário…

Na verdade, ele insere um registro beleza, mas quando vai inserir outro dá:

2007-03-06 10:50:59,906 DEBUG hibernate.jdbc.AbstractBatcher -> about to close PreparedStatement (open PreparedStatements: 1, globally: 1) 2007-03-06 10:50:59,906 DEBUG hibernate.jdbc.AbstractBatcher -> closing statement 2007-03-06 10:50:59,921 DEBUG hibernate.util.JDBCExceptionReporter -> could not get next sequence value [select nextval ('hibernate_sequence')] java.sql.SQLException: ERROR: relation "hibernate_sequence" does not exist at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1471) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1256) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:175) at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:388) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:329) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:239) at org.hibernate.id.SequenceGenerator.generate(SequenceGenerator.java:75) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:91) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:186) at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:175) at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:530) at org.hibernate.impl.SessionImpl.save(SessionImpl.java:518) at org.hibernate.impl.SessionImpl.save(SessionImpl.java:514) at UsuarioDAO.UsInserir(UsuarioDAO.java:21) at Teste.main(Teste.java:15) 2007-03-06 10:50:59,921 WARN hibernate.util.JDBCExceptionReporter -> SQL Error: 0, SQLState: 42P01 2007-03-06 10:50:59,921 ERROR hibernate.util.JDBCExceptionReporter -> ERROR: relation "hibernate_sequence" does not exist Erro: could not get next sequence value

8 Respostas

P

a tag <generator> vc usa dentro da tag <id> q define a “PK” do seu Objeto…

qual banco vc esta usando? na tabela q vc esta inserindo, exista uma PK auto-increment? ou existe uma sequence q vc usa para gerar essa PK???

W

então…

eu uso o postgre… e o campo usuario é o PK… é auto-increment (ou no caso do postgre, serial).

Só que eu preciso que o hibernate cadastre um valor automanticamente, pois ele por padrão tá enviando 0… e como não dá pra ter dois registros iguais tá dando pau…

&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;!DOCTYPE hibernate-mapping PUBLIC &quot;-//Hibernate Mapping DTD 3.0//EN&quot; &quot;hibernate-mapping-3.0.dtd&quot;&gt; &lt;hibernate-mapping&gt; &lt;class name=&quot;CorrespUsr&quot; schema=&quot;public&quot; table=&quot;corresp_usr&quot;&gt; &lt;id column=&quot;usuario&quot; name=&quot;usuario&quot; type=&quot;long&quot;&gt; &lt;generator class=&quot;native&quot;&gt; &lt;param name=&quot;usuario&quot;&gt;CorrespUsr&lt;/param&gt; &lt;/generator&gt; &lt;/id&gt; &lt;property column=&quot;nome&quot; length=&quot;200&quot; name=&quot;nome&quot; type=&quot;string&quot;/&gt; &lt;property column=&quot;setor&quot; length=&quot;200&quot; name=&quot;setor&quot; type=&quot;string&quot;/&gt; &lt;property column=&quot;senha&quot; length=&quot;20&quot; name=&quot;senha&quot; type=&quot;string&quot;/&gt; &lt;property column=&quot;status_2&quot; length=&quot;4&quot; name=&quot;status2&quot; type=&quot;integer&quot;/&gt; &lt;/class&gt; &lt;/hibernate-mapping&gt;

P

cara, eu dei uma pesquisada minima, e achei alguma coisa…tenta isso:

&lt;generator class="SEQUENCE"&gt;
    &lt;param name="sequence"&gt;CorrespUsr&lt;/param&gt;
&lt;/generator&gt;

ou

&lt;generator class="NATIVE"&gt;
    &lt;param name="sequence"&gt;CorrespUsr&lt;/param&gt;
&lt;/generator&gt;

um detalhe q eu achei, foi o pessoal reclamando do case-sensitive no PostgreSQL…se puder, cria sua sequence com tudo em minusculo, e lembra de colocar exatamente igual no hbm.xml

espero ter ajudado…

flw

W

oiii…

então…

usando qualquer um dos dois exemplos q vc me passou, deu o mesmo erro:

could not instantiate id generator

Eu tenho q instanciar o gerador de id em algum lugar?! tipo, fazer uma variavel de contagem?

valeu!

P

vc esta usando serial como auto-increment, agora me tira uma duvida, em algum momento vc define o nome desse serial???

pq eu nunca usei serial com hibernate, mas sei q serial do postgresql, nada mais eh q uma sequence…entao, se vc nao define nome para o serial, acho q o lance eh vc criar uma sequence, definindo um nome e esse eh o parametro q vc vai usar onde eu coloquei CorrespUsr…

ele esta dando esse erro pq nao esta encontrando a sequence eu acho…

W

Algum exemplo de onde coloco isso? e de como o faço?

Tenho os seguintes arquivos, todos na mesma pasta (até q eu entenda, costumo deixar assim) hehehe…
-hibernate.properties
-log4j.properties
-UsuarioDAO.java
-CorrespUsr.hbm.xml
-CorrespUsr.java
-Teste.java

A minha dúvida é… em qual destes arquivos eu seto uma sequencia e como eu faço para cria-la…

Brigadão e desculpe a ignorância. =D

P

a SEQUENCE vc tem q criar no PostgrSQL…vc vai fazer o seguinte:

CREATE SEQUENCE seq_correspusr;
CREATE TABLE CorrespUsr &#40;
	id		INT				NOT NULL	DEFAULT NEXTVAL&#40;'seq_correspusr'&#41;,

--resto dos parametros

	primary key	&#40;id&#41;
&#41;;

e ai no seu CorrespUsr.hbm.xml vc coloca o seguinte:

&lt;id name="id"
      column="id"
      type="integer"
      unsaved-value="null"&gt;
      &lt;generator class="SEQUENCE"&gt;
            &lt;param name="sequence"&gt;seq_correspusr&lt;/param&gt;
      &lt;/generator&gt;
&lt;/id&gt;

agora vai…

se nao funcionar vc tira a parte “DEFAULT NEXTVAL(‘seq_correspusr’)”…

flw

W

=D

deu certo…

algum exemplo de como buscar dados (filtrando por algum critério) e mostra-los na tela?

já descobri um lance chamado “criteria”… hehehe…

se quiser aproveitar e dar uma mão neste sentido tô aceitando!

=D

valeu!!!

Criado 6 de março de 2007
Ultima resposta 7 de mar. de 2007
Respostas 8
Participantes 2