2017-01-05 8 views
2

я столкнулся вне проблемы с поколения ID для моих сущностей, порожденных JHipster:Почему и как hibernate_sequence используется для идентификатора generatior

  1. Dev среды на базе H2
  2. Prod окружающей среды на Postgres
  3. у меня есть один объект «станция» с двумя полями «ид» и «имя»
  4. Создание сценария LiquiBase который импортирует словарь в таблице «станции», как INSERT INTO station (name) VALUES ('Adygeya') без определения ID
  5. Попытка добавить станцию ​​на Dev среде - OK
  6. Попытка добавить станцию ​​на прод - Hibernate пытается добавить новую станцию ​​с дублированным ID

ПОЧЕМУ?

Мои исследования показали, что только для postgres и oracle в начальной схеме jhipster создал новую последовательность «hibernate_sequence», которая используется для создания новых сущностей.

Так что я фиксированные этот неправильный behaivour, добавив определенное имя последовательности для моего объекта правила генерации ID

@Id 
@GeneratedValue(strategy = GenerationType.AUTO, generator = "station_gen") 
@SequenceGenerator(name = "station_gen", sequenceName = "station_id_seq") 
private Long id; 

Теперь у меня есть только три вопроса:

  1. Почему JHipster используя один sequince для все таблицы для postgres и oracle?
  2. Где он настроен?
  3. Что я делаю неправильно?
+0

Какая версия JHipster? Я думаю, что это стратегия по умолчанию либо в весенних данных, либо в Hibernate. Использование только одной последовательности для всех таблиц не объясняет проблему с дублирующимися ключами. У меня такая же настройка, и я не получил ее. –

+0

Да, это стратегия Hibernate по умолчанию. –

+0

@ GaëlMarziou JHipster v. 3.9.1 –

ответ

1

Опубликовать здесь мой ответ, который был найден с помощью @ GaëlMarziou и @Julien Dubois.

Thats из-за истории и поведения по умолчанию алгоритма Hibernate hilo с GenerationType.AUTO. MySQL не поддерживает секвенции, поэтому JHipster должен использовать этот глупый алгоритм.

Команда JHipster нашла правильное решение, которое исправит мою проблему. Решение состоит в том, чтобы использовать GenerationType.SEQUENCE для всех БД, но использовать GenerationType.IDENTITY для MySql. Все данные в этом фиксации https://github.com/jhipster/generator-jhipster/commit/4516b4ff4d49a96a75fd963b0c7667f198bd9b79

Таким образом, я тоже настрою объекты.

 Смежные вопросы

  • Нет связанных вопросов^_^