2014-06-22 61 views
1

我正在使用jooq生成的dao's在表上執行創建操作。 表有一個主鍵「ID」有型BIGSERIAL和空使用jooq自動生成postgres中的主鍵

CREATE TABLE public.book (
    id bigserial NOT NULL, 
    author varchar(64) 
    CONSTRAINT book_primary PRIMARY KEY (id) 
) 

創建具有jooq記錄我說

Book b = new Book(); 
b.setAuthor("Eric"); 
BookDao bd = new BookDao(jooqConfiguration); 
bd.insert(b); 

這將引發約束違反異常ID的不是默認的限制是空。如果我設置一個ID如

Book b = new Book(); 
b.setId(25); 
b.setAuthor("Eric"); 
BookDao bd = new BookDao(jooqConfiguration); 
bd.insert(b); 

我沒有得到例外,但postgres不會自動生成一個值。

http://www.postgresql.org/docs/current/static/datatype-numeric.html#DATATYPE-SERIAL Postgres的文件說,「省略的SERIAL列中插入,或指定DEFAULT關鍵字」

如何配置的jooq產生DAO要麼忽略此列或使用默認值

編輯 - 我使用jooq版本3.3.2和postgres 8.4。 (最終的目標是紅眼,所以在postgres 8.4上進行原型設計)。

+1

只是一個側面說明:你的鏈接不是「postgres文檔」。官方手冊在這裏:http://www.postgresql.org/docs/current/static/index.html –

+0

可以肯定的是,你*使用最新的jOOQ版本(3.4.0)? –

+0

使用nextval(),檢查手冊:http://www.jooq.org/doc/3.4/manual-single-page/#sequences-and-serials –

回答

1

生成的dao沒有正確處理處理默認值的這個問題已經出現在jooq的github問題列表中,如https://github.com/jOOQ/jOOQ/issues/2700

固定在3.4.0。遷移到3.4.0爲我解決了這個問題。

回答問題,以便其他人可以根據需要找到它。

+0

你比我快:-)但是我認爲在某個地方出現了問題,感謝您查看它 –