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.