2013-01-21 24 views
1
工作

我试图运行在Postgres的这一说法:INSERT与缺省的标识不PostgreSQL的

insert into field (id, name) values (DEFAULT, 'Me') 

,我得到这个错误:

ERROR: null value in column "id" violates not-null constraint 

我最后不得不手动设置ID 。这个问题是当我的应用程序插入一条记录时,我得到一个重复的键错误。我正在使用Play框架和ebean ORM构建一个Java应用程序。所以整个模式由ebean自动生成。在这种情况下,将记录手动插入到数据库中的最佳做法是什么?

编辑:
这里是我如何创建我的领域类

@Entity 
public class Field { 
    @id 
    public Long id; 
    public String name; 
} 

编辑:
我检查了field_seq序列,它看起来像这样:

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); 
+0

检查此链接:http://stackoverflow.com/questions/13372422/psqlexception-error-null-value-in-column-violates-not-null-constraint –

+0

该链接是一个不同的问题 – Brian

+0

我在pgAdmin III中运行了你的语句,并得到'ERROR:语法错误在或接近“/”LINE 1:/ d field' – Brian

回答

0

这是有效的。

insert into field (id, name) values (nextval('field_seq'), "Me"); 
4

没有列默认定义field.id。由于序列​​似乎已经存在(但没有连接到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, 
    ... 
); 

Details on serial or bigserial in the manual.
不知道该播放框架是如何实现这一点。

+0

我希望找到一种更好的方式来处理这个问题,而不是为ORM创建的每个表手动更改序列。但如果没有其他选择,这将会很好。 – Brian