2016-12-21 23 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は(ほとんどのデータベースに)JDBCにバインドするID列の名前を知っている必要があるので、あなたは現在、jOOQでRETURNING句を使用することはできません。残念ながら、ID列をRETURNING節に渡すだけでは、これがID列であるとは限りません。 RETURNING節に複数の列を渡すこともできます。その場合、jOOQはどちらがID列であるかわからない場合があります。

+0

お返事ありがとうございます。だから、私は最大値を照会し、1を追加する必要がありますか?自動インクリメントを利用するには別の方法がありますか? –

+1

@bigdestroyer:競合状態につながるかもしれないので、私は最大値を照会しません。私はおそらくユニークなので、再び名前でユーザーを検索したいと思います。または、このクエリでidが正しく返される場合は、jOOQコードジェネレータを使用してください。 –

+0

良いアイデア。ありがとう! –

関連する問題