To use a MySQL AUTO_INCREMENT
column, you are supposed to use an IDENTITY
strategy:
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
Which is what you’d get when using AUTO
with MySQL:
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
Which is actually equivalent to
@Id @GeneratedValue
private Long id;
In other words, your mapping should work. But Hibernate should omit the id
column in the SQL insert statement, and it is not. There must be a kind of mismatch somewhere.
Did you specify a MySQL dialect in your Hibernate configuration (probably MySQL5InnoDBDialect
or MySQL5Dialect
depending on the engine you’re using)?
Also, who created the table? Can you show the corresponding DDL?
Follow-up: I can’t reproduce your problem. Using the code of your entity and your DDL, Hibernate generates the following (expected) SQL with MySQL:
insert
into
Operator
(active, password, username)
values
(?, ?, ?)
Note that the id
column is absent from the above statement, as expected.
To sum up, your code, the table definition and the dialect are correct and coherent, it should work. If it doesn’t for you, maybe something is out of sync (do a clean build, double check the build directory, etc) or something else is just wrong (check the logs for anything suspicious).
Regarding the dialect, the only difference between MySQL5Dialect
or MySQL5InnoDBDialect
is that the later adds ENGINE=InnoDB
to the table objects when generating the DDL. Using one or the other doesn’t change the generated SQL.