Para usar MySQL AUTO_INCREMENT
columna, se supone que debes usar una IDENTITY
estrategia:
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
Que es lo que obtendrías al usar AUTO
con MySQL:
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
Que en realidad es equivalente a
@Id @GeneratedValue
private Long id;
En otras palabras, su mapeo debería funcionar. Pero Hibernate debería omitir el id
columna en la declaración de inserción de SQL, y no lo es. Debe haber algún tipo de desajuste en alguna parte.
¿Especificó un dialecto de MySQL en su configuración de Hibernate (probablemente MySQL5InnoDBDialect
o MySQL5Dialect
dependiendo del motor que estés usando)?
Además, ¿quién creó la tabla? ¿Puedes mostrar el DDL correspondiente?
Seguimiento: No puedo reproducir tu problema. Usando el código de su entidad y su DDL, Hibernate genera el siguiente SQL (esperado) con MySQL:
insert
into
Operator
(active, password, username)
values
(?, ?, ?)
Tenga en cuenta que el id
columna está ausente de la declaración anterior, como se esperaba.
En resumen, su código, la definición de la tabla y el dialecto son correctos y coherentes, debería funcionar. Si no es así para usted, tal vez algo no esté sincronizado (haga una compilación limpia, verifique dos veces el directorio de compilación, etc.) o algo más esté mal (verifique los registros en busca de algo sospechoso).
En cuanto al dialecto, el único diferencia entre MySQL5Dialect
o MySQL5InnoDBDialect
es que el posterior agrega ENGINE=InnoDB
a los objetos de la tabla al generar el DDL. Usar uno u otro no cambia el SQL generado.