For at bruge en MySQL AUTO_INCREMENT
kolonne, skal du bruge en IDENTITY
strategi:
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
Hvilket er, hvad du vil få, når du bruger AUTO
med MySQL:
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
Hvilket faktisk svarer til
@Id @GeneratedValue
private Long id;
Med andre ord burde din kortlægning fungere. Men Hibernate bør udelade id
kolonne i SQL insert-sætningen, og det er den ikke. Der må være en slags mismatch et eller andet sted.
Har du angivet en MySQL-dialekt i din Hibernate-konfiguration (sandsynligvis MySQL5InnoDBDialect
eller MySQL5Dialect
afhængigt af den motor du bruger)?
Og hvem har lavet bordet? Kan du vise den tilsvarende DDL?
Opfølgning: Jeg kan ikke gengive dit problem. Brug af koden til din enhed og din DDL, Hibernate genererer følgende (forventede) SQL med MySQL:
insert
into
Operator
(active, password, username)
values
(?, ?, ?)
Bemærk, at id
kolonne er som forventet fraværende i ovenstående erklæring.
For at opsummere, din kode, tabeldefinitionen og dialekten er korrekte og sammenhængende, det burde virke. Hvis det ikke er noget for dig, er der måske noget ude af synkronisering (foretag en ren build, dobbelttjek build-mappen osv.) eller noget andet er bare galt (tjek logfilerne for noget mistænkeligt).
Med hensyn til dialekten, den eneste forskel mellem MySQL5Dialect
eller MySQL5InnoDBDialect
er, at den senere tilføjer ENGINE=InnoDB
til tabelobjekterne ved generering af DDL. Brug af den ene eller den anden ændrer ikke den genererede SQL.