【发布时间】:2014-04-25 17:12:26
【问题描述】:
我正在使用 Spring JdbcBatchItemWriter 将大量数据刷新到 postgres 数据库。
INSERT INTO customer (id, name, zip) VALUES (?,?,?)
我只设置 name + zip 因为我希望自动生成 id。但是我怎样才能让数据库自动生成 id 值呢?如果我执行上面的语句,数据库会抱怨没有设置 id。
@Entity
class Customer {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
long id;
}
【问题讨论】:
-
不要在插入语句中包含
id列。仅包括姓名和zip。INSERT INTO customer (name, zip) values (?,?). -
我当然之前尝试过,但它给出了错误:
ERROR : PSQLException: ERROR: NULL-value in column ?id? violates Not-Null-Constraint -
正确创建表格。请参阅 stackoverflow.com/questions/7718585/… 和 stackoverflow.com/questions/3108777/… 了解 2 种可能的解决方案。
-
该表是由休眠自动生成的,因为我还使用应用程序中的实体:
CREATE TABLE customer ( id bigint NOT NULL, name character varying(255), zip character varying(255), CONSTRAINT customer_pkey PRIMARY KEY (id));但我还想使用 JdbcBatchItemWriter 进行批量导入。所以我不想自己创建数据库表,无论如何我希望自动生成 id。 -
让 hibernate 自动生成你的模式,用于生产,通常是一个坏主意。我不相信
@GeneratedValue会添加到您的 create table 语句中。如果您的插入与普通的 hibernate/jpa 一起工作,那么为什么不使用JpaItemWriter或Hibernate ItemWriter?
标签: java spring hibernate postgresql spring-batch