Я пытаюсь узнать, как работает 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, предложите один из них. Я делаю прототипы, а не долгосрочные проекты, сконструированные с помощью mondo.)