Чтобы использовать столбец 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
отсутствует в приведенном выше заявлении, как и ожидалось.
Подводя итог, ваш код, определение таблицы и диалект являются правильными и связными, он должен работать.Если это не для вас, возможно, что-то не синхронизировано (выполните чистую сборку, дважды проверьте каталог сборки и т. Д.) Или что-то еще просто не так (проверьте журналы на наличие каких-либо подозрительных).
Относительнодиалект, разница only между MySQL5Dialect
или MySQL5InnoDBDialect
заключается в том, что последний добавляет ENGINE=InnoDB
к объектам таблицы при генерации DDL.Использование одного или другого не меняет сгенерированный SQL.