Squence x Identity

2 respostas
silfar

Pessoal alguem pode me explicar qual a diferença entre sequence e identity do hibernate.

Estou usando o postgresql e fazendo assim:

@SequenceGenerator(name =  "seq_user", sequenceName = "anotacoes.hibernate_sequence")
public class Aluno implements Serializable  {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="seq_user")

    @Column(name= "id_aluno")

Isso tá certo ?

2 Respostas

romarcio

Para usar sequence, você precisa criar a sequência no banco de dados. No postrgresql não sei como funciona, eu utilizo no oracle e se faz assim:

-- Verificar MAX ID
SELECT MAX(ID_CONTRIBUINTE)+1 FROM CONTRIBUINTES

-- Substituir ??? por MAX ID encontrado
CREATE SEQUENCE SEQ_CONTRIBUINTES START WITH ??? INCREMENT BY 1  NOMAXVALUE  NOCYCLE

Conforme a documentação do hibernate 3.2GA, temos os seguintes tipos de Geradores de chave:

increment
gera identificadores dos tipos long, short ou int que são unicos apenas quando nenhum outro processo está
inserindo dados na mesma tabela. Não utilize em ambientes de cluster.
identity
suporta colunas de identidade em DB2, MySQL, MS SQL Server, Sybase e HypersonicSQL. O identificador
retornado é do tipo long, short ou int.
sequence
utiliza uma sequence em DB2, PostgreSQL, Oracle, SAP DB, McKoi ou um generator no Interbase. O
identificador de retorno é do tipo long, short ou int.
hilo
utiliza um algoritmo hi/lo para gerar de forma eficiente identificadores do tipo long, short ou int, a partir
de uma tabela e coluna fornecida (por default hibernate_unique_key e next_hi) como fonte para os valores
hi. O algoritmo hi/lo gera identificadores que são únicos apenas para um banco de dados particular.
seqhilo
utiliza um algoritmo hi/lo para gerar de forma eficinete identificadores do tipo long, short ou int, a partir
de uma sequence de banco de dados fornecida.
uuid
utiliza um algortimo UUID de 128-bits para gerar identificadores do tipo string, unicos em uma rede(o endereço
IP é utilizado). O UUID é codificado como um string de digitos hexadecimais de tamanho 32.
guid
utiliza um string GUID gerado pelo banco de dados no MS SQL Server e MySQL.
native
seleciona entre identity, sequence ou hilo dependendo das capacidades do banco de dados utilizado.
assigned
deixa a aplicação definir um identificador para o objeto antes que o save() seja chamado. Esta é a estratégia
default se nenhum elemento é especificado.

H

Bacana a resposta cara, ajudou muito!
Obrigado.

Criado 17 de maio de 2010
Ultima resposta 2 de mar. de 2012
Respostas 2
Participantes 3