Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So kommentieren Sie das MYSQL-Autoinkrementfeld mit JPA-Anmerkungen

Um ein MySQL AUTO_INCREMENT zu verwenden Spalte, sollten Sie eine IDENTITY verwenden Strategie:

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

Was Sie erhalten würden, wenn Sie AUTO verwenden mit MySQL:

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

Was eigentlich äquivalent zu

ist
@Id @GeneratedValue
private Long id;

Mit anderen Worten, Ihr Mapping sollte funktionieren. Aber Hibernate sollte die id weglassen Spalte in der SQL-Einfügungsanweisung, und es ist nicht. Irgendwo muss da eine Art Diskrepanz sein.

Haben Sie in Ihrer Hibernate-Konfiguration einen MySQL-Dialekt angegeben (wahrscheinlich MySQL5InnoDBDialect oder MySQL5Dialect abhängig von der verwendeten Engine)?

Und wer hat die Tabelle erstellt? Können Sie die entsprechende DDL zeigen?

Nachverfolgung: Ich kann dein Problem nicht reproduzieren. Verwenden Sie den Code von Ihrem Entität und Ihre DDL, Hibernate generiert das folgende (erwartete) SQL mit MySQL:

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

Beachten Sie, dass die id Spalte fehlt erwartungsgemäß in der obigen Anweisung.

Zusammenfassend ist Ihr Code, die Tabellendefinition und der Dialekt korrekt und kohärent, es sollte funktionieren. Wenn dies bei Ihnen nicht der Fall ist, ist möglicherweise etwas nicht synchron (führen Sie einen sauberen Build durch, überprüfen Sie das Build-Verzeichnis doppelt usw.) oder etwas anderes ist einfach falsch (überprüfen Sie die Protokolle auf verdächtige Elemente).

Was den Dialekt betrifft, das nur Unterschied zwischen MySQL5Dialect oder MySQL5InnoDBDialect ist, dass später ENGINE=InnoDB hinzugefügt wird zu den Tabellenobjekten beim Generieren der DDL. Die Verwendung des einen oder anderen ändert nichts am generierten SQL.