Um ein MySQL AUTO_INCREMENT
zu verwenden Spalte, sollten Sie eine IDENTITY
verwenden Strategie:
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
Was Sie erhalten würden, wenn Sie AUTO
verwenden mit MySQL:
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
Was eigentlich äquivalent zu
ist@Id @GeneratedValue
private Long id;
Mit anderen Worten, Ihr Mapping sollte funktionieren. Aber Hibernate sollte die id
weglassen Spalte in der SQL-Einfügungsanweisung, und es ist nicht. Irgendwo muss da eine Art Diskrepanz sein.
Haben Sie in Ihrer Hibernate-Konfiguration einen MySQL-Dialekt angegeben (wahrscheinlich MySQL5InnoDBDialect
oder MySQL5Dialect
abhängig von der verwendeten Engine)?
Und wer hat die Tabelle erstellt? Können Sie die entsprechende DDL zeigen?
Nachverfolgung: Ich kann dein Problem nicht reproduzieren. Verwenden Sie den Code von Ihrem Entität und Ihre DDL, Hibernate generiert das folgende (erwartete) SQL mit MySQL:
insert
into
Operator
(active, password, username)
values
(?, ?, ?)
Beachten Sie, dass die id
Spalte fehlt erwartungsgemäß in der obigen Anweisung.
Zusammenfassend ist Ihr Code, die Tabellendefinition und der Dialekt korrekt und kohärent, es sollte funktionieren. Wenn dies bei Ihnen nicht der Fall ist, ist möglicherweise etwas nicht synchron (führen Sie einen sauberen Build durch, überprüfen Sie das Build-Verzeichnis doppelt usw.) oder etwas anderes ist einfach falsch (überprüfen Sie die Protokolle auf verdächtige Elemente).
Was den Dialekt betrifft, das nur Unterschied zwischen MySQL5Dialect
oder MySQL5InnoDBDialect
ist, dass später ENGINE=InnoDB
hinzugefügt wird zu den Tabellenobjekten beim Generieren der DDL. Die Verwendung des einen oder anderen ändert nichts am generierten SQL.