Pour utiliser un MySQL AUTO_INCREMENT
colonne, vous êtes censé utiliser un IDENTITY
stratégie :
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
Quel est ce que vous obtiendriez en utilisant AUTO
avec MySQL :
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
Ce qui équivaut en fait à
@Id @GeneratedValue
private Long id;
En d'autres termes, votre mappage devrait fonctionner. Mais Hibernate devrait omettre le id
colonne dans l'instruction d'insertion SQL, et ce n'est pas le cas. Il doit y avoir une sorte de décalage quelque part.
Avez-vous spécifié un dialecte MySQL dans votre configuration Hibernate (probablement MySQL5InnoDBDialect
ou MySQL5Dialect
selon le moteur que vous utilisez)?
Aussi, qui a créé la table? Pouvez-vous afficher le DDL correspondant ?
Suivi : Je n'arrive pas à reproduire votre problème. Utiliser le code de votre entité et votre DDL, Hibernate génère le SQL (attendu) suivant avec MySQL :
insert
into
Operator
(active, password, username)
values
(?, ?, ?)
Notez que le id
La colonne est absente de l'instruction ci-dessus, comme prévu.
Pour résumer, votre code, la définition de la table et le dialecte sont corrects et cohérents, cela devrait fonctionner. Si ce n'est pas le cas pour vous, peut-être que quelque chose n'est pas synchronisé (faites une construction propre, vérifiez le répertoire de construction, etc.) ou quelque chose d'autre ne va pas (vérifiez les journaux pour tout élément suspect).
Concernant le dialecte, le seul différence entre MySQL5Dialect
ou MySQL5InnoDBDialect
est que ce dernier ajoute ENGINE=InnoDB
aux objets de table lors de la génération du DDL. L'utilisation de l'un ou l'autre ne modifie pas le SQL généré.