J'ai une application j2ee utilisant hibernate avec annotation. Comment annoter le champ Id dans ma classe pojo pour le définir comme incrémentation automatique ou généré automatiquement. et en ajoutant le bean, est-ce que je laisse ce champ dans mon bean nul?
java
hibernate
auto-increment
cédric
la source
la source
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 (?, ?, ?, ?, ?)
la source
FYI
En utilisant NetBeans nouvelles classes d' entité de base de données avec MySQL * colonne auto_increment *, vous crée un attribut avec les annotations suivantes:
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Basic(optional = false) @Column(name = "id") @NotNull private Integer id;
Cela m'obtenait la même erreur disant que la colonne ne devait pas être nulle, alors j'ai simplement supprimé l'anotation @NotNull en laissant l'attribut nul, et cela fonctionne!
la source
Hibernate définit cinq types de stratégies de génération d'identifiants:
AUTO - soit colonne d'identité, séquence ou table selon le DB sous-jacent
TABLE - table contenant l'identifiant
IDENTITY - colonne d'identité
SEQUENCE - séquence
copie d'identité - l'identité est copiée d'une autre entité
Exemple utilisant Table
@Id @GeneratedValue(strategy=GenerationType.TABLE , generator="employee_generator") @TableGenerator(name="employee_generator", table="pk_table", pkColumnName="name", valueColumnName="value", allocationSize=100) @Column(name="employee_id") private Long employeeId;
pour plus de détails, consultez le lien .
la source
Si vous avez une colonne numérique que vous souhaitez incrémenter automatiquement, cela peut être une option à définir
columnDefinition
directement. Cela présente l'avantage que le schéma génère automatiquement la valeur même s'il est utilisé sans mise en veille prolongée. Cela peut rendre votre code spécifique à la base de données:import javax.persistence.Column; @Column(columnDefinition = "serial") // postgresql
la source
Au cas où quelqu'un «cogne» dans cette question SO à la recherche de stratégies pour la table Informix lorsque PK est de type Serial .
J'ai trouvé que cela fonctionne ... à titre d'exemple.
@Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name = "special_serial_pk") private Integer special_serial_pk;
Pour que cela fonctionne, assurez-vous que lorsque vous faites session.SaveOrUpdate vous transmettez la valeur de la colonne special_serial_pk NULL .
Dans mon cas, je fais un HTML POST avec JSON comme ça ...
{ "special_serial_pk": null, //<-- Field to be incremented "specialcolumn1": 1, "specialcolumn2": "I love to code", "specialcolumn3": true }
la source
L'utilisation de nouvelles classes d'entités netbeans à partir de la base de données avec une colonne mysql auto_increment vous crée un attribut avec le hibernate.hbm.xml suivant: id est l'incrément automatique
la source