Я пытаюсь узнать, как работает Hibernate, и сталкиваюсь с почти неприемлемой кривой обучения. Я не вижу, как заставить Hibernate соблюдать политику auto_increment для моих объектов. Вместо этого он перезаписывает записи в базе данных существующими идентификаторами, начиная с 1.
У меня есть простой Foo
объект, поддерживаемый таблицей MySQL, определенной следующим образом:
CREATE TABLE `Foo` (
`fooId` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`fooId`),
)
Я подтвердил, что вставка нескольких объектов Foo вручную с помощью SQL (insert into Foo values();
) делает правильные вещи.
Мой класс Java имеет идентификатор, указанный с помощью таких аннотаций:
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="fooId")
private Integer id;
Затем я выполняю некоторый тестовый код, который просто создает экземпляры объектов Foo и сохраняет их в базе данных (используя session.save(obj)
). Кажется, что он использует свою собственную последовательность первичных ключей, начиная с единицы, и не рассматривает политику ключей таблицы. Он переписывает все, что там было.
Я пробовал варианты с битом @GeneratedValue
(используя все возможные стратегии, исключая скобки в скобках). Кто-то даже предложил полностью отказаться от GeneratedValue
. Ничто не похоже на работу.
Я что-то упускаю? Что мне не хватает? Hibernate действительно такой сложный?
(Если у кого-нибудь есть альтернативный вариант сохранения базы данных Java, предложите один. Я делаю прототипы, а не долгосрочные моноинженерные проекты.)