sql >> Database teknologi >  >> RDS >> Mysql

Sådan annoteres MYSQL autoincrement-felt med JPA-annoteringer

For at bruge en MySQL AUTO_INCREMENT kolonne, skal du bruge en IDENTITY strategi:

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

Hvilket er, hvad du vil få, når du bruger AUTO med MySQL:

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

Hvilket faktisk svarer til

@Id @GeneratedValue
private Long id;

Med andre ord burde din kortlægning fungere. Men Hibernate bør udelade id kolonne i SQL insert-sætningen, og det er den ikke. Der må være en slags mismatch et eller andet sted.

Har du angivet en MySQL-dialekt i din Hibernate-konfiguration (sandsynligvis MySQL5InnoDBDialect eller MySQL5Dialect afhængigt af den motor du bruger)?

Og hvem har lavet bordet? Kan du vise den tilsvarende DDL?

Opfølgning: Jeg kan ikke gengive dit problem. Brug af koden til din enhed og din DDL, Hibernate genererer følgende (forventede) SQL med MySQL:

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

Bemærk, at id kolonne er som forventet fraværende i ovenstående erklæring.

For at opsummere, din kode, tabeldefinitionen og dialekten er korrekte og sammenhængende, det burde virke. Hvis det ikke er noget for dig, er der måske noget ude af synkronisering (foretag en ren build, dobbelttjek build-mappen osv.) eller noget andet er bare galt (tjek logfilerne for noget mistænkeligt).

Med hensyn til dialekten, den eneste forskel mellem MySQL5Dialect eller MySQL5InnoDBDialect er, at den senere tilføjer ENGINE=InnoDB til tabelobjekterne ved generering af DDL. Brug af den ene eller den anden ændrer ikke den genererede SQL.



  1. Postgresql indsæt trigger for at indstille værdi

  2. oci_bind_by_name og to_date PHP/OCI/Oracle

  3. Brug @@IDENTITY til at returnere den sidst indsatte identitetsværdi i SQL Server

  4. Er COUNT(rowid) hurtigere end COUNT(*)?