sql >> Databáze >  >> RDS >> Mysql

Jak anotovat pole automatického přírůstku MYSQL pomocí anotací JPA

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.



  1. Oprava varování MySQL 1287:„BINARY expr“ je zastaralé a bude odstraněno v budoucí verzi

  2. Jakou velikost používáte pro varchar (MAX) v deklaraci parametru?

  3. Získejte data z čísla týdne v T-SQL

  4. Počet sloupců neodpovídá počtu hodnot na řádku 1