sql >> Base de Datos >  >> RDS >> Mysql

Cómo anotar el campo de incremento automático MYSQL con anotaciones JPA

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.