Java 使用默认id插入不';我不能在PostgreSQL中工作
我尝试在Postgres中运行此语句:Java 使用默认id插入不';我不能在PostgreSQL中工作,java,postgresql,insert,playframework,ebean,Java,Postgresql,Insert,Playframework,Ebean,我尝试在Postgres中运行此语句: insert into field (id, name) values (DEFAULT, 'Me') 我得到了这个错误: ERROR: null value in column "id" violates not-null constraint 我最终不得不手动设置id。问题是,当我的应用程序插入一条记录时,我得到了一个重复的密钥错误。我正在使用Play框架和ebean ORM构建一个java应用程序。因此,整个模式是由ebean自动生成的。在这种情
insert into field (id, name) values (DEFAULT, 'Me')
我得到了这个错误:
ERROR: null value in column "id" violates not-null constraint
我最终不得不手动设置id。问题是,当我的应用程序插入一条记录时,我得到了一个重复的密钥错误。我正在使用Play框架和ebean ORM构建一个java应用程序。因此,整个模式是由ebean自动生成的。在这种情况下,将记录手动插入数据库的最佳实践是什么
编辑:下面是我创建Field类的方法
@Entity
public class Field {
@id
public Long id;
public String name;
}
编辑:我检查了字段顺序,结果如下:
CREATE SEQUENCE public.field_seq INCREMENT BY 1 MINVALUE 1 MAXVALUE 9223372036854775807 START 1 CACHE 1;
编辑:以下是在pgAdmin III中生成的SQL:
CREATE TABLE field
(
id bigint NOT NULL,
created timestamp without time zone,
modified timestamp without time zone,
name character varying(255),
enabled boolean,
auto_set boolean,
section character varying(17),
input_type character varying(8),
user_id bigint,
CONSTRAINT pk_field PRIMARY KEY (id),
CONSTRAINT fk_field_user_3 FOREIGN KEY (user_id)
REFERENCES account (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT ck_field_input_type CHECK (input_type::text = ANY (ARRAY['TEXT'::character varying, 'TEXTAREA'::character varying]::text[])),
CONSTRAINT ck_field_section CHECK (section::text = ANY (ARRAY['MAIN_CONTACT_INFO'::character varying, 'PARTICIPANT_INFO'::character varying]::text[]))
);
CREATE INDEX ix_field_user_3
ON field
USING btree
(user_id);
没有为
field.id
定义默认列。由于序列public.field_seq
似乎已经存在(但未附加到field.id
),您可以使用以下方法修复它:
ALTER SEQUENCE field_seq OWNED BY field.id;
ALTER TABLE field
ALTER COLUMN id SET DEFAULT (nextval('field_seq'::regclass));
但是,请确保序列没有用于其他内容
首先,这样创建表要简单得多:
CREATE TABLE field
(
id bigserial PRIMARY KEY,
...
);
不确定Play框架如何实现这一点。这是可行的
insert into field (id, name) values (nextval('field_seq'), "Me");
检查此链接:该链接针对不同的问题。我从pgAdmin III运行了您的语句,并在编辑器中的“/”行1:/d字段处或附近获取
错误:语法错误,它显示id的默认值为空。我看到了/问题。对于\,它给了我同样的错误。我希望找到更好的处理方法,而不是手动改变ORM创建的每个表的顺序。但如果没有其他选择,这将是一件好事。