Hibernate Annotations e campo id serial do PostgreSQL

Olá,

Não estou conseguindo criar um campo id do tipo serial do PostgreSQl pelas anotações do Hibernate. Ele sempre cria como int mas sem auto-incremento.

@Entity
@SequenceGenerator(name="usuario_id_seq", sequenceName="usuario_id_seq")
public class Usuario {

    @Id
    @GeneratedValue(generator="usuario_id_seq", strategy=GenerationType.SEQUENCE)
    private long id;
    private String login;
    private String senha;

    //gets e sets

}

No persistence.xml do JPA eu configurei para ele recriar as tabelas:

<property name="hibernate.hbm2ddl.auto" value="create-drop"/>

Ele cria a sequence “usuario_id_seq”, cria a tabela usuario com o campo id como chave primária, mas do tipo int8 e não do tipo serial.

Se eu crio as tabelas na mão, colocando o campo id como serial, funciona… Mas quando eu mando o Hibernate criar a tabela para mim não funciona…

Cara,
Da uma olhadinha na teu hbm.xml
a tag generator tem q ser algo do tipo

<generator class="sequence" >              
      <param name="sequence">usuario_id_seq</param>
</generator>

Acho q seu problema deve estar por aih…abraços

Tente utilizar strategy = GenerationType.IDENTITY. A anotação SequenceGenerator acredito que você possa remover, o hibernate já define para você. Para que seja criado o campo id do tipo serial, tente adicionar a anotação @Column com o atributo columnDefinition = “serial”.

Não posso testar o código no momento, mas pelo que lembro vai funcionar.

[quote=leandronatalcoral]Tente utilizar strategy = GenerationType.IDENTITY. A anotação SequenceGenerator acredito que você possa remover, o hibernate já define para você. Para que seja criado o campo id do tipo serial, tente adicionar a anotação @Column com o atributo columnDefinition = “serial”.

Não posso testar o código no momento, mas pelo que lembro vai funcionar.[/quote]

Vlw cara.
A anotação @Column com o atributo columnDefinition = “serial” funcionou perfeito.
Abs.

[quote=alepenchel][quote=leandronatalcoral]Tente utilizar strategy = GenerationType.IDENTITY. A anotação SequenceGenerator acredito que você possa remover, o hibernate já define para você. Para que seja criado o campo id do tipo serial, tente adicionar a anotação @Column com o atributo columnDefinition = “serial”.

Não posso testar o código no momento, mas pelo que lembro vai funcionar.[/quote]

Vlw cara.
A anotação @Column com o atributo columnDefinition = “serial” funcionou perfeito.
Abs.[/quote]

Corrigindo pessoal.
Desse jeito gerou meu campo no BD como serial, mas gerou várias sequences.
1 pra cada FK desse campo em outras tabelas.

Consegui fazendo assim:

@Entity
@Table(name = "state")
public class State extends BaseEntity implements Serializable {

	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column(name = "id", insertable=false, updatable=false)
	private Long id;

O campo “id” na tabela “state” ficou do tipo “serial”.
PS: Uso postgres 9.1

Abs.