JPA下一个ID值

时间:2016-04-25 12:27:13

标签: java sql postgresql jpa

我有Postgres DB。我从它做了实体(作为* .java类),现在,我想创建一个新的Object并将其提交给DB。我希望,ID将由DB自动创建。所以我只填写名称,地址等变量,我不填写idCustomer。问题是,当数据库中有记录(由另一个应用程序创建,或者只是通过SQL INSERT命令创建)然后我运行我的程序时,它失败,异常告诉我:某些事情......已经使用了id = 1。当我再次运行它(并且在DB中至少有2条记录)如果再次失败则使用sa = id = 2 ......依此类推,直到我运行我的程序第N次并且它通过

CREATE TABLE "customer" (
"id_customer" SERIAL NOT NULL,
"surename" char(64) NOT NULL,
"name" char(64) NOT NULL,
"dateofbirth" date NOT NULL,
"gender" char(1) NOT NULL CHECK(gender='m' OR gender='z')
"email" varchar(64) NOT NULL UNIQUE,
PRIMARY KEY("id_customer")
);

我如何在Java中定义ID

@Id
@SequenceGenerator( name = "customerSeq", sequenceName = "customer_id_customer_seq", allocationSize = 1)
@GeneratedValue( strategy = GenerationType.SEQUENCE, generator = "customerSeq" )
@Column(name = "id_customer")
Long idCustomer;

我创建新的Object(不填写id)并将其提交给DB

entitymanager.getTransaction().begin();
entitymanager.persist(createdObject);
entitymanager.getTransaction().commit();

我的问题是:如何获得正确的ID并将其推送到DB

OR(和更好)

如何推送到没有id的DB创建的对象,DB应该填充它

1 个答案:

答案 0 :(得分:0)

我很蠢。

在运行java程序之前,我使用SQL INSERT命令将一些示例数据放到数据库中。我自己设置ID。所以序列不能增加。希望你不要花太多时间在这个问题上。