Per usare un MySQL AUTO_INCREMENT
colonna, dovresti usare un IDENTITY
strategia:
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
Che è ciò che otterresti usando AUTO
con MySQL:
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
Che in realtà è equivalente a
@Id @GeneratedValue
private Long id;
In altre parole, la tua mappatura dovrebbe funzionare. Ma Hibernate dovrebbe omettere id
colonna nell'istruzione di inserimento SQL e non lo è. Dev'esserci una specie di mancata corrispondenza da qualche parte.
Hai specificato un dialetto MySQL nella configurazione di Hibernate (probabilmente MySQL5InnoDBDialect
o MySQL5Dialect
a seconda del motore che usi)?
Inoltre, chi ha creato la tabella? Puoi mostrare il DDL corrispondente?
Seguito: Non riesco a riprodurre il tuo problema. Utilizzando il codice del tuo entità e tuo DDL, Hibernate genera il seguente SQL (previsto) con MySQL:
insert
into
Operator
(active, password, username)
values
(?, ?, ?)
Nota che l'id
colonna è assente dalla dichiarazione di cui sopra, come previsto.
Per riassumere, il tuo codice, la definizione della tabella e il dialetto sono corretti e coerenti, dovrebbe funzionare. In caso contrario, forse qualcosa non è sincronizzato (fai una build pulita, ricontrolla la directory di build, ecc.) o qualcos'altro è semplicemente sbagliato (controlla i log per qualsiasi cosa sospetta).
Per quanto riguarda il dialetto, il solo differenza tra MySQL5Dialect
o MySQL5InnoDBDialect
è che il successivo aggiunge ENGINE=InnoDB
agli oggetti tabella durante la generazione del DDL. L'uso dell'uno o dell'altro non cambia l'SQL generato.