如果 id 是 bigserial,则 Postgres 分区无法与休眠一起使用
Postgres Partitioning not working with hibernate if id is bigserial
我已经在 Postgres 中对 table 进行了分区。所以现在有 2 tables :
- Base table 用户,没有主键但对 id 列使用序列生成器:nextval('users_id_seq'::regclass)
Child table 继承用户
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 向用户 table 插入数据。在我使用的数据模型中:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
出现以下错误:
"org.springframework.orm.jpa.JpaSystemException: The database returned
no natively generated identity value; nested exception is
org.hibernate.HibernateException: The database returned no natively
generated identity value
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:333)
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:244)"
它与 postgres 独立地按预期工作。
得到解决方案。 GenerationType.IDENTITY 而不是 GenerationType.AUTO 正在工作
如果您是从 spring 引导 (2.2.x +) 来到这里并使用 postgresql 分区,仅接受的答案不足以使其工作。在这种情况下,Hibernate 将抛出以下内容:
Schema-validation: missing sequence [schema_name.hibernate_sequence]
在这种情况下,hibernate 只是希望您通过将其传递为序列字段来提供标识生成器:
@GeneratedValue(strategy = GenerationType.AUTO, generator = "schema_name.generator_sequence_name_seq")
我已经在 Postgres 中对 table 进行了分区。所以现在有 2 tables :
- Base table 用户,没有主键但对 id 列使用序列生成器:nextval('users_id_seq'::regclass)
Child table 继承用户
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 向用户 table 插入数据。在我使用的数据模型中:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
出现以下错误:
"org.springframework.orm.jpa.JpaSystemException: The database returned no natively generated identity value; nested exception is org.hibernate.HibernateException: The database returned no natively generated identity value at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:333) at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:244)"
它与 postgres 独立地按预期工作。
得到解决方案。 GenerationType.IDENTITY 而不是 GenerationType.AUTO 正在工作
如果您是从 spring 引导 (2.2.x +) 来到这里并使用 postgresql 分区,仅接受的答案不足以使其工作。在这种情况下,Hibernate 将抛出以下内容:
Schema-validation: missing sequence [schema_name.hibernate_sequence]
在这种情况下,hibernate 只是希望您通过将其传递为序列字段来提供标识生成器:
@GeneratedValue(strategy = GenerationType.AUTO, generator = "schema_name.generator_sequence_name_seq")