Para usar um MySQL
AUTO_INCREMENT
coluna, você deve usar uma IDENTITY
estratégia:@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
Qual é o que você obteria ao usar
AUTO
com MySQL:@Id @GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
O que na verdade é equivalente a
@Id @GeneratedValue
private Long id;
Em outras palavras, seu mapeamento deve funcionar. Mas o Hibernate deve omitir o
id
coluna na instrução SQL insert e não é. Deve haver uma espécie de incompatibilidade em algum lugar. Você especificou um dialeto MySQL em sua configuração do Hibernate (provavelmente
MySQL5InnoDBDialect
ou MySQL5Dialect
dependendo do motor que você está usando)? Além disso, quem criou a tabela? Você pode mostrar o DDL correspondente?
Acompanhamento: Não consigo reproduzir seu problema. Usando o código de seu entidade e seu DDL, o Hibernate gera o seguinte SQL (esperado) com o MySQL:
insert
into
Operator
(active, password, username)
values
(?, ?, ?)
Observe que o
id
coluna está ausente da declaração acima, como esperado. Resumindo, seu código, a definição da tabela e o dialeto estão corretos e coerentes, deve funcionar. Se isso não acontecer para você, talvez algo esteja fora de sincronia (faça uma compilação limpa, verifique o diretório de compilação, etc) ou algo está errado (verifique os logs para ver se há algo suspeito).
Em relação ao dialeto, o somente diferença entre
MySQL5Dialect
ou MySQL5InnoDBDialect
é que o último adiciona ENGINE=InnoDB
aos objetos da tabela ao gerar o DDL. Usar um ou outro não altera o SQL gerado.