sql >> Databasteknik >  >> RDS >> Mysql

Hur man kommenterar MYSQL autoinkrementfält med JPA-kommentarer

För att använda en MySQL AUTO_INCREMENT kolumn, ska du använda en IDENTITY strategi:

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

Vilket är vad du skulle få när du använder AUTO med MySQL:

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

Vilket faktiskt motsvarar

@Id @GeneratedValue
private Long id;

Din mappning borde med andra ord fungera. Men Hibernate bör utelämna id kolumnen i SQL insert-satsen, och det är den inte. Det måste finnas en sorts missmatchning någonstans.

Angav du en MySQL-dialekt i din Hibernate-konfiguration (förmodligen MySQL5InnoDBDialect eller MySQL5Dialect beroende på vilken motor du använder)?

Och vem skapade bordet? Kan du visa motsvarande DDL?

Uppföljning: Jag kan inte återskapa ditt problem. Använd koden för din enhet och din DDL, Hibernate genererar följande (förväntade) SQL med MySQL:

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

Observera att id kolumnen saknas i ovanstående uttalande, som förväntat.

För att sammanfatta, din kod, tabelldefinitionen och dialekten är korrekta och sammanhängande, det borde fungera. Om det inte är något för dig kanske något är osynkroniserat (gör en ren build, dubbelkolla build-katalogen, etc.) eller så är något annat helt fel (kolla loggarna för något misstänkt).

När det gäller dialekten, den enda skillnad mellan MySQL5Dialect eller MySQL5InnoDBDialect är att den senare lägger till ENGINE=InnoDB till tabellobjekten när DDL genereras. Att använda det ena eller det andra ändrar inte den genererade SQL-koden.



  1. Finns det en Entity Framework 7 Database-First POCO Generator?

  2. SQLiteDiskIOException:felkod 10:disk I/O-fel återställs på ICS och Samsung Nexus på DROP TABLE

  3. Hur man skapar en användare i Oracle 11g och beviljar behörigheter

  4. Skapar databasunderhållsplaner