如果id为bigserial,则Postgres分区不能与hibernate一起工作

问题描述 投票:0回答:2

我已经在Postgres中对表格进行了分区。因此,现在有2个表:

  1. 基本表用户,没有主键,但对ID列使用序列生成器: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一起独立工作。

postgresql hibernate partitioning postgresql-9.5 database-partitioning
2个回答
1
投票

得到解决方案。 GenerationType.AUTO正在代替GenerationType.IDENTITY工作


0
投票

如果您是从Spring Boot(2.2.x +)来的,并且使用了postgresql分区,仅接受的答案不足以使其正常工作。在这种情况下,休眠将抛出以下内容:

Schema-validation: missing sequence [schema_name.hibernate_sequence]

在这种情况下,休眠状态只是希望您通过将其传递为:来为序列字段提供身份生成器:

@GeneratedValue(strategy = GenerationType.AUTO, generator = "schema_name.generator_sequence_name_seq")
© www.soinside.com 2019 - 2024. All rights reserved.