带有DEFAULT id的INSERT在PostgreSQL中不起作用

Tom*_*ant 2 java postgresql insert playframework ebean

我尝试在Postgres中运行此语句:

insert into field (id, name) values (DEFAULT, 'Me')
Run Code Online (Sandbox Code Playgroud)

我收到了这个错误:

ERROR: null value in column "id" violates not-null constraint
Run Code Online (Sandbox Code Playgroud)

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

编辑:
这是我创建Field类的方法

@Entity
public class Field {
    @id
    public Long id;
    public String name;
}
Run Code Online (Sandbox Code Playgroud)

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

CREATE SEQUENCE public.field_seq INCREMENT BY 1 MINVALUE 1 MAXVALUE 9223372036854775807 START 1 CACHE 1; 
Run Code Online (Sandbox Code Playgroud)

编辑:
这是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);
Run Code Online (Sandbox Code Playgroud)

Erw*_*ter 5

没有定义的列默认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));
Run Code Online (Sandbox Code Playgroud)

但是,确保序列不用于其他内容.

创建像这样的表开始会更简单:

CREATE TABLE field
(
  id bigserial PRIMARY KEY,
  ...
);
Run Code Online (Sandbox Code Playgroud)

手册中serialbigserial手册中的详细信息.
不确定Play框架如何实现这一点.