Java 使用默认id插入不';我不能在PostgreSQL中工作

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自动生成的。在这种情

我尝试在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自动生成的。在这种情况下,将记录手动插入数据库的最佳实践是什么

编辑:
下面是我创建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创建的每个表的顺序。但如果没有其他选择,这将是一件好事。