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 ?
Réponses
Trop de publicités?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 (?, ?, ?, ?, ?)
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 !
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