如果id为bigserial,则Postgres分区将无法与休眠模式一起使用

时间:2019-01-30 06:10:46

标签: postgresql hibernate partitioning postgresql-9.5 database-partitioning

我已经在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独立运行。

2 个答案:

答案 0 :(得分:0)

得到解决方案。而不是GenerationType.IDENTITY,GenerationType.AUTO正在工作

答案 1 :(得分: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")