Hibernate не добавляет auto_increment - PullRequest
0 голосов
/ 25 апреля 2020

У меня возникла проблема при запуске SpringBootTests.

В тестах используется база данных H2, поэтому они воссоздают схему при каждом запуске. Для одной из моих сущностей Hibernate не добавляет auto_increment в столбец id.

Я не могу найти никаких существенных различий между ошибочной сущностью (Payment) и другие, которые работают правильно (например, Invoice). Все они имеют следующие аннотации в поле id:

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

Я установил spring.jpa.show-sql=true, и вот что я вижу:

  • Объект Payment показывает create table payment (id bigint not null,
  • Объект Invoice показывает create table invoice (id bigint not null auto_increment,

На самом деле я попытался скопировать класс Payment в Payment2, а Payment2 не получил проблема:

  • Объект Payment показывает create table payment (id bigint not null,
  • Объект Payment2 показывает create table invoice (id bigint not null auto_increment,

Учитывая это, я полагаю Я должен искать переопределяющую конфигурацию, которая не в классе Payment, но которая каким-то образом удаляет auto_increment только из этого одного класса. Кто-нибудь знает, что может быть причиной этого?

Это версии задействованных библиотек:

  • Версия Spring Boot 2.1.8
  • Hibernate 5.3.11
  • База данных H2 1.4.200

1 Ответ

0 голосов
/ 28 апреля 2020

Я наконец понял это. Это предположение было верным:

Я должен искать конфигурацию переопределения, которая не входит в класс Payment, но которая каким-то образом удаляет auto_increment только из этого одного класса.

Оказалось, что коллега добавил «легкую» версию только для чтения сущности Payment под названием PaymentLight. Он читал из той же таблицы payment, но без каких-либо соединений. Поле id в классе PaymentLight не имеет аннотации @GeneratedValue.

Я не проверял это, но я предполагаю, что Hibernate объединил две сущности (в любом случае, класс light был подмножеством) и использовал конфигурацию @GeneratedValue для одной из них (вероятно, в алфавитном порядке).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...