Разделение Postgres не работает с спящим режимом, если id имеет значение bigserial

Я разделил свою таблицу в Postgres. Итак, теперь есть 2 таблицы:

  1. Пользователи базовой таблицы без первичного ключа, но с использованием генератора последовательности для столбца идентификатора: nextval('users_id_seq'::regclass)
  2. Дочерняя таблица, наследующая пользователей

    CREATE TABLE users_part_2019_01 (
        CHECK (createdon >= '2019-01-01 00:00:00'
                        AND createdon < '2019-02-01 00:00:00')
    ) INHERITS (users);
    
    ALTER TABLE users_part_2019_01 ADD CONSTRAINT users1_pkey PRIMARY KEY (id);
    

Я вставляю данные в таблицу пользователей, используя jpa. В модели данных, которую я использовал:

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

Получается следующая ошибка:

«org.springframework.orm.jpa.JpaSystemException: база данных не вернула изначально сгенерированное значение идентификатора; вложенным исключением является org.hibernate.HibernateException: база данных не вернула изначально сгенерированное значение идентификатора в org.springframework.orm.jpa.vendor.HibernateJpaDialect. convertHibernateAccessException(HibernateJpaDialect.java:333) в org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:244)"

Он работает, как и ожидалось, независимо от postgres.


person Neha Arora    schedule 30.01.2019    source источник


Ответы (2)


Получил решение. Вместо GenerationType.IDENTITY работает GenerationType.AUTO

person Neha Arora    schedule 06.02.2019
comment
Пожалуйста, примите ваш ответ, чтобы ваш вопрос был помечен как решенный. - person a_horse_with_no_name; 09.12.2019

Если вы приходите сюда из весенней загрузки (2.2.x +) и используете разбиение postgresql, одного принятого ответа недостаточно, чтобы заставить его работать. Hibernate в этом случае выдаст следующее:

Schema-validation: missing sequence [schema_name.hibernate_sequence]

В этом случае спящий режим просто хочет, чтобы вы предоставили генератор идентификаторов для поля последовательности, передав его как:

@GeneratedValue(strategy = GenerationType.AUTO, generator = "schema_name.generator_sequence_name_seq")
person Simas Joneliunas    schedule 02.02.2020