以下代码仅呈现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 ...
“客户的`id属性使用@Id注释,以便JPA将其识别为对象的ID .id属性也使用@GeneratedValue注释,以指示应自动生成ID。”
从他们的示例看起来他们所做的就是创建new Customer
并自动生成ID。我在这里错过了什么?
答案 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。
现在一切都很好。