För att använda en MySQL AUTO_INCREMENT
kolumn, ska du använda en IDENTITY
strategi:
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
Vilket är vad du skulle få när du använder AUTO
med MySQL:
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
Vilket faktiskt motsvarar
@Id @GeneratedValue
private Long id;
Din mappning borde med andra ord fungera. Men Hibernate bör utelämna id
kolumnen i SQL insert-satsen, och det är den inte. Det måste finnas en sorts missmatchning någonstans.
Angav du en MySQL-dialekt i din Hibernate-konfiguration (förmodligen MySQL5InnoDBDialect
eller MySQL5Dialect
beroende på vilken motor du använder)?
Och vem skapade bordet? Kan du visa motsvarande DDL?
Uppföljning: Jag kan inte återskapa ditt problem. Använd koden för din enhet och din DDL, Hibernate genererar följande (förväntade) SQL med MySQL:
insert
into
Operator
(active, password, username)
values
(?, ?, ?)
Observera att id
kolumnen saknas i ovanstående uttalande, som förväntat.
För att sammanfatta, din kod, tabelldefinitionen och dialekten är korrekta och sammanhängande, det borde fungera. Om det inte är något för dig kanske något är osynkroniserat (gör en ren build, dubbelkolla build-katalogen, etc.) eller så är något annat helt fel (kolla loggarna för något misstänkt).
När det gäller dialekten, den enda skillnad mellan MySQL5Dialect
eller MySQL5InnoDBDialect
är att den senare lägger till ENGINE=InnoDB
till tabellobjekten när DDL genereras. Att använda det ena eller det andra ändrar inte den genererade SQL-koden.