Hibernate + Postgres + Identity

6 respostas
Filipi_Silveira

Estou usando Postgres 8 e tenho uma tabela que a coluna que é chaves primária é do tipo SERIAL. O que é bastante prático pois uma sequence é automaticamente gerada e sua utilização é transparente.

Porém o dialect para o postgres gera uma exceção dizendo que não aceita identity!

<generator class = "identity"/>
net.sf.hibernate.MappingException: Dialect does not support identity key generation

:?: Alguém sabe como faço para obter um Dialect para Postgres que suporte identity, ou conhece alguma maneira de contornar esse problema sem que eu tenho que alterar as tabalas do BD?

Eu tentei também <generator class = "sequence"/> e chamando a sequence criada automaticamente pelo Postgres porém ocorre uma exceção dizendo que o tipo da chave da minha classe (Long) não pode ser mapeado para o tipo Serial… :?: Nesse caso a pergunta é: que tipo em Java seria igual ao serial do Postgres?

OBS: Estou usando a versão 2.1.8 do Hibernate.

Filipi Silveira
Porto Alegre - RS

6 Respostas

caiofilipini

Já tentou usar o generator-class “native”?

[]'s

Filipi_Silveira

caiofilipini:
Já tentou usar o generator-class “native”?

Devo passar algum parâmetro?

caiofilipini

Não, é só mudar o mapeamento para:

&lt;generator class = "native"/&gt;

:wink:

[]'s

Filipi_Silveira

Não funcionou…

session.save

dispara a seguinte exceção:

java.sql.SQLException: ERROR: relation "hibernate_sequence" does not exist
package rfcore.model.administration;

import rfcore.multiLanguageSupport.Language;
import java.util.Set;

/**
 *
 * @author  Filipi Silveira
 * @hibernate.class
 *  table = "RF_COMPONENTS"
 *  schema = "RFCore"
 */
public class RFComponent {
    private Long identifier;
    private String displayName;
    private String context;
    private Set supportedLanguages;
  
    public RFComponent() {
    }

    /**
     * @hibernate.id
     *  generator-class="native"
     */
    public Long getIdentifier()  {
        return this.identifier;
    }

    public void setIdentifier(Long identifier)  {
        this.identifier = identifier;
    }

    /**
     * @hibernate.property
     *  column="display_name"
     */
    public String getDisplayName() {
        return this.displayName;
    }

    public void setDisplayName(java.lang.String displayName)   {
        this.displayName = displayName;
    }

    /**
     * @return Value of property context.
     * @hibernate.property
     */
    public String getContext() {
        return this.context;
    }

    public void setContext(String context) {
        this.context = context;
    }

    public Set getSupportedLanguages() {
        return supportedLanguages;
    }

    public void setSupportedLanguages(Set supportedLanguages) {
        this.supportedLanguages = supportedLanguages;
    }
}

Obrigado.

[]'s

Filipi Silveira
Porto Alegre-RS

maresp

&lt;generator class="native"&gt; &lt;param name="sequence"&gt;nome-da-sequencia&lt;/param&gt; &lt;/generator&gt;

F

Vc deve q criar uma sequence com o nome hibernate-sequence ou tentar do jeito que o maresp postou…

Criado 11 de março de 2005
Ultima resposta 7 de jun. de 2005
Respostas 6
Participantes 4