Chcete-li použít MySQL AUTO_INCREMENT
ve sloupci, měli byste použít IDENTITY
strategie:
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
Což je to, co získáte při použití AUTO
s MySQL:
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
Což je vlastně ekvivalent
@Id @GeneratedValue
private Long id;
Jinými slovy, vaše mapování by mělo fungovat. Ale Hibernate by měl vynechat id
v příkazu SQL insert a není. Někde musí být určitý druh nesouladu.
Zadali jste dialekt MySQL v konfiguraci Hibernate (pravděpodobně MySQL5InnoDBDialect
nebo MySQL5Dialect
v závislosti na motoru, který používáte)?
A kdo vytvořil tabulku? Můžete ukázat odpovídající DDL?
Následná: Nemohu reprodukovat váš problém. Pomocí kódu vašeho entita a vaše DDL, Hibernate generuje následující (očekávané) SQL s MySQL:
insert
into
Operator
(active, password, username)
values
(?, ?, ?)
Všimněte si, že id
sloupec ve výše uvedeném příkazu chybí, jak se očekávalo.
Abych to shrnul, váš kód, definice tabulky a dialekt jsou správné a koherentní, mělo by to fungovat. Pokud tomu tak není, možná není něco synchronizováno (proveďte čisté sestavení, dvakrát zkontrolujte adresář sestavení atd.) nebo je něco jiného prostě špatně (zkontrolujte, zda v protokolech není něco podezřelého).
Pokud jde o dialekt, jediný rozdíl mezi MySQL5Dialect
nebo MySQL5InnoDBDialect
je, že později přidá ENGINE=InnoDB
k objektům tabulky při generování DDL. Použití jednoho nebo druhého nezmění generované SQL.