sql >> Database >  >> RDS >> Mysql

Hoe een MYSQL auto-increment veld te annoteren met JPA annotaties

Een MySQL AUTO_INCREMENT gebruiken kolom, wordt u verondersteld een IDENTITY . te gebruiken strategie:

@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;

Dat krijg je als je AUTO . gebruikt met MySQL:

@Id @GeneratedValue(strategy=GenerationType.AUTO)
private Long id;

Wat eigenlijk gelijk is aan

@Id @GeneratedValue
private Long id;

Met andere woorden, uw mapping zou moeten werken. Maar Hibernate moet de id . weglaten kolom in de SQL insert-instructie, en dat is het niet. Er moet ergens een soort mismatch zijn.

Heeft u een MySQL-dialect opgegeven in uw Hibernate-configuratie (waarschijnlijk MySQL5InnoDBDialect of MySQL5Dialect afhankelijk van de motor die u gebruikt)?

En wie heeft de tafel gemaakt? Kun je de bijbehorende DDL laten zien?

Vervolg: Ik kan je probleem niet reproduceren. Gebruik de code van uw entiteit en uw DDL, Hibernate genereert de volgende (verwachte) SQL met MySQL:

insert 
into
    Operator
    (active, password, username) 
values
    (?, ?, ?)

Merk op dat de id kolom ontbreekt in de bovenstaande verklaring, zoals verwacht.

Samenvattend, uw code, de tabeldefinitie en het dialect zijn correct en coherent, het zou moeten werken. Als het niet voor u werkt, is er misschien iets niet gesynchroniseerd (doe een schone build, controleer de build-directory dubbel, enz.)

Wat betreft het dialect, de enige verschil tussen MySQL5Dialect of MySQL5InnoDBDialect is dat de latere toevoeging ENGINE=InnoDB naar de tabelobjecten bij het genereren van de DDL. Het gebruik van de een of de ander verandert niets aan de gegenereerde SQL.



  1. Testgegevens genereren in SQL Server

  2. Patchgeschiedenistabellen in Oracle Apps (11i/R12.1/R12.2)

  3. Database-ontwerp met Vertabelo

  4. SQL commando niet juist afgesloten?