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;

我尝试了 SEQUENCEAUTO,但结果相同。 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。

现在一切都很好。