Een MySQL AUTO_INCREMENT
gebruiken kolom, wordt u verondersteld een IDENTITY
. te gebruiken strategie:
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
Dat krijg je als je AUTO
. gebruikt met MySQL:
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
Wat eigenlijk gelijk is aan
@Id @GeneratedValue
private Long id;
Met andere woorden, uw mapping zou moeten werken. Maar Hibernate moet de id
. weglaten kolom in de SQL insert-instructie, en dat is het niet. Er moet ergens een soort mismatch zijn.
Heeft u een MySQL-dialect opgegeven in uw Hibernate-configuratie (waarschijnlijk MySQL5InnoDBDialect
of MySQL5Dialect
afhankelijk van de motor die u gebruikt)?
En wie heeft de tafel gemaakt? Kun je de bijbehorende DDL laten zien?
Vervolg: Ik kan je probleem niet reproduceren. Gebruik de code van uw entiteit en uw DDL, Hibernate genereert de volgende (verwachte) SQL met MySQL:
insert
into
Operator
(active, password, username)
values
(?, ?, ?)
Merk op dat de id
kolom ontbreekt in de bovenstaande verklaring, zoals verwacht.
Samenvattend, uw code, de tabeldefinitie en het dialect zijn correct en coherent, het zou moeten werken. Als het niet voor u werkt, is er misschien iets niet gesynchroniseerd (doe een schone build, controleer de build-directory dubbel, enz.)
Wat betreft het dialect, de enige verschil tussen MySQL5Dialect
of MySQL5InnoDBDialect
is dat de latere toevoeging ENGINE=InnoDB
naar de tabelobjecten bij het genereren van de DDL. Het gebruik van de een of de ander verandert niets aan de gegenereerde SQL.