Spring JPA + 引导 + 序列生成器始终为 0
Spring JPA + Boot +Sequence Generator always 0
以下代码仅呈现 ID 0
@Id
@GeneratedValue(strategy=GenerationType.AUTO, generator="PROJECT_SEQ_GEN")
@SequenceGenerator(name="PROJECT_SEQ_GEN", sequenceName="X.X_PROJECT_SEQ", allocationSize=1)
private long projectId;
我尝试了 SEQUENCE
和 AUTO
,但结果相同。 x_project_seq.nextval
在我的 Oracle 数据库中工作正常。我想继续使用数据库中已经定义的序列。
根据 Spring 的入门指南 - Accessing Data with JPA ...
"The Customer’s `id property is annotated with @Id so that JPA will recognize it as the object’s ID. The id property is also annotated with @GeneratedValue to indicate that the ID should be generated automatically."
从他们的例子看来,他们所做的只是创建 new Customer
并且 ID 是自动生成的。我在这里错过了什么?
您的实施使用了错误的 GenerationType。更新您的策略声明以使用 strategy = GenerationType.SEQUENCE
并简单地使用 PROJECT_SEQ_GEN
作为 sequenceName
值。
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="PROJECT_SEQ_GEN")
@SequenceGenerator(name="PROJECT_SEQ_GEN", sequenceName="PROJECT_SEQ_GEN", allocationSize=1)
private long projectId;
花了我一上午的时间,但我终于解决了这个问题。
我使用 Hibernate 工具自动生成 POJO,并且所有注释都放在方法级别,但是,Spring 建议(要求?)它们放在字段级别。您也不能只将 Id 注释移动到字段级别,因为它要么是一个,要么是另一个。因此,我按照 this 的回答自定义 Hibernate 工具以生成带有全部字段级别注释的 POJO。
现在一切都很好。
以下代码仅呈现 ID 0
@Id
@GeneratedValue(strategy=GenerationType.AUTO, generator="PROJECT_SEQ_GEN")
@SequenceGenerator(name="PROJECT_SEQ_GEN", sequenceName="X.X_PROJECT_SEQ", allocationSize=1)
private long projectId;
我尝试了 SEQUENCE
和 AUTO
,但结果相同。 x_project_seq.nextval
在我的 Oracle 数据库中工作正常。我想继续使用数据库中已经定义的序列。
根据 Spring 的入门指南 - Accessing Data with JPA ...
"The Customer’s `id property is annotated with @Id so that JPA will recognize it as the object’s ID. The id property is also annotated with @GeneratedValue to indicate that the ID should be generated automatically."
从他们的例子看来,他们所做的只是创建 new Customer
并且 ID 是自动生成的。我在这里错过了什么?
您的实施使用了错误的 GenerationType。更新您的策略声明以使用 strategy = GenerationType.SEQUENCE
并简单地使用 PROJECT_SEQ_GEN
作为 sequenceName
值。
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="PROJECT_SEQ_GEN")
@SequenceGenerator(name="PROJECT_SEQ_GEN", sequenceName="PROJECT_SEQ_GEN", allocationSize=1)
private long projectId;
花了我一上午的时间,但我终于解决了这个问题。
我使用 Hibernate 工具自动生成 POJO,并且所有注释都放在方法级别,但是,Spring 建议(要求?)它们放在字段级别。您也不能只将 Id 注释移动到字段级别,因为它要么是一个,要么是另一个。因此,我按照 this 的回答自定义 Hibernate 工具以生成带有全部字段级别注释的 POJO。
现在一切都很好。