Spring JPA + Boot + Sequence Generator始终为0

时间:2015-03-30 21:32:12

标签: spring-boot jpa oracle11g spring-data-jpa

以下代码仅呈现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 ...

“客户的`id属性使用@Id注释,以便JPA将其识别为对象的ID .id属性也使用@GeneratedValue注释,以指示应自动生成ID。”

从他们的示例看起来他们所做的就是创建new Customer并自动生成ID。我在这里错过了什么?

2 个答案:

答案 0 :(得分:1)

您使用错误的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;

答案 1 :(得分:0)

整个早上都把我带走了,但我终于解决了这个问题。

我使用Hibernate工具自动生成POJO,并且所有注释都放在方法级别,但是,Spring在字段级别建议(需要?)它们。您也不能将Id注释移动到字段级别,因为它是一个或另一个。所以我按照this的答案定制了Hibernate工具,以便在字段级别生成带有注释的POJO。

现在一切都很好。