94 votes

Hibernate Auto Incrément ID

J'ai une application j2ee utilisant hibernate avec annotation. Comment annoter le champ Id dans ma classe de pojo pour le définir comme incrément automatique ou généré automatiquement. et en ajoutant le bean dois-je laisser ce champ dans mon bean NULL ?

34voto

Kaushik Lele Points 893

Faites-le comme suit :-

@Id
@GenericGenerator(name="kaugen" , strategy="increment")
@GeneratedValue(generator="kaugen")
@Column(name="proj_id")
  public Integer getId() {
    return id;
 }

Vous pouvez utiliser n'importe quel nom arbitraire au lieu de kaugen. Cela a bien fonctionné, je pouvais voir ci-dessous les requêtes sur la console

Hibernate: select max(proj_id) from javaproj
Hibernate: insert into javaproj (AUTH_email, AUTH_firstName, AUTH_lastName, projname,         proj_id) values (?, ?, ?, ?, ?)

13voto

jmoreira Points 539

FYI

En utilisant netbeans New Entity Classes from Database avec une colonne mysql *auto_increment*, vous créez un attribut avec les annotations suivantes :

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
@NotNull
private Integer id;

Cela me donnait la même erreur en disant que la colonne ne devait pas être NULL, donc j'ai simplement supprimé l'annotation @NotNull laissant l'attribut NULL, et ça fonctionne !

6voto

alfonx Points 1487

Si vous avez une colonne numérique que vous voulez incrémenter automatiquement, il peut être une option pour définir columnDefinition directement. Ceci a l'avantage que le schéma génère automatiquement la valeur même s'il est utilisé sans hibernation. Cela pourrait rendre votre code spécifique à db :

import javax.persistence.Column;
@Column(columnDefinition = "serial") // postgresql

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X