За да използвате MySQL AUTO_INCREMENT
колона, трябва да използвате IDENTITY
стратегия:
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
Което ще получите, когато използвате AUTO
с MySQL:
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
Което всъщност е еквивалентно на
@Id @GeneratedValue
private Long id;
С други думи, вашето картографиране трябва да работи. Но Hibernate трябва да пропусне id
колона в SQL инструкцията за вмъкване и не е така. Някъде трябва да има някакво несъответствие.
Вие посочихте ли MySQL диалект във вашата конфигурация на Hibernate (вероятно MySQL5InnoDBDialect
или MySQL5Dialect
в зависимост от двигателя, който използвате)?
Освен това, кой създаде таблицата? Можете ли да покажете съответния DDL?
Последващи действия: Не мога да възпроизве проблема ти. Използване на вашия код обект и вашите DDL, Hibernate генерира следния (очакван) SQL с MySQL:
insert
into
Operator
(active, password, username)
values
(?, ?, ?)
Имайте предвид, че id
колоната отсъства в горното изявление, както се очаква.
За да обобщим, вашият код, дефиницията на таблицата и диалектът са правилни и последователни, трябва да работи. Ако не е за вас, може би нещо не е синхронизирано (направете чиста компилация, проверете двукратно директорията за компилиране и т.н.) или нещо друго просто не е наред (проверете регистрационните файлове за нещо подозрително).
Относно диалекта, единственият разлика между MySQL5Dialect
или MySQL5InnoDBDialect
е, че по-късното добавя ENGINE=InnoDB
към обектите на таблицата при генериране на DDL. Използването на едното или другото не променя генерирания SQL.