2016-12-21 67 views
3

我有一個MariaDB數據庫,我試圖在我的表users中插入一行。它有一個生成的id,我想在插入後得到它。我已經看到this但它不是爲我工作:INSERT..RETURNING在JOOQ中不工作

public Integer addNewUser(String name) { 
    Record record = context.insertInto(table("users"), field("name")) 
     .values(name) 
     .returning(field("id")) 
     .fetchOne(); 
    return record.into(Integer.class); 
} 

插入新行,但record總是null。我沒有使用JOOQ代碼生成。

回答

3

這是jOOQ 3.9的已知的限制:https://github.com/jOOQ/jOOQ/issues/2943

你使用普通的SQL時,目前不能使用jOOQ的RETURNING條款,因爲jOOQ需要知道標識列名綁定到JDBC(在大多數數據庫) 。不幸的是,將ID列傳遞給RETURNING子句是不夠的,因爲不能保證這是標識列。您也可以將幾列傳遞給RETURNING子句,以防萬一哪一個人不知道哪一個是標識列。

+0

感謝您的回答。所以,我需要查詢最大值並添加1,對嗎?有沒有另一種方式來利用自動增量? –

+1

@bigdestroyer:我不會查詢最大值,因爲這可能會導致競爭條件。我會再次通過名稱搜索用戶,因爲它可能是唯一的。或者,您使用jOOQ代碼生成器,以防此查詢將正確返回ID –

+0

好主意。謝謝! –