2017-09-05 1 views
1

PostgresQL INSERTsは、挿入された列のサブセットを使用してoutput_expressionを返すことができますが、この機能をjOOQで使用するための構文を正しく取得できません。INSERT ...返されるoutput_expression

これは私が達成したいもののPL/pgSQLのと同等です:

CREATE TABLE my_table (i INTEGER, t TEXT); 

DO 
    $$DECLARE my_var TEXT; 
BEGIN 
    INSERT INTO my_table(i, t) 
     VALUES(1, 'hello') 
     RETURNING (t) INTO my_var; 

    RAISE NOTICE 'Inserted text was --> % <--', my_var; 
END$$; 

しかし、私は見つけることの問題は、この構文はjOOQで無効である:私はしました

String retVal = using(configuration) 
    .insertInto(MY_TABLE, 
     MY_TABLE.I, 
     MY_TABLE.T) 
    .values(i, t) 
    .returning(MY_TABLE.T) 
    .fetchInto(String.class); 

最も近いですfetchOneを使用して完全なMyTableRecordを取得し、必要なフィールドを選択しています。私が望む変数のタイプを正確に取得するようにjOOQに指示する別の方法はありますか?

PD:私はあなたが私が見つけた回避策は次の通りである.fetch().into(String.class)

+0

これは、ロードマップ上:https://github.com/jOOQ/jOOQ/issues/3185 –

答えて

0

を使用している、それはJavaのOptionalを利用しています:

String retVal = using(configuration) 
    .insertInto(MY_TABLE, 
     MY_TABLE.I, 
     MY_TABLE.T) 
    .values(i, t) 
    .returning() 
    .fetchOptional() 
    .map(MyTableRecord::getT) 
    .orElse(null); 
+0

'fetch()。into()'は 'String'の代わりに' List 'を返してコンパイルしません。しかし、 'retVal'の型をコンパイルするように変更したとしても、このエラーが発生します:' org.jooq.exception.MappingException:次数2の複数列レコードを値型クラスjava.lang.String'にマップできません。 'fetch()'は 'Record1'の代わりに' MyTableRecord'を返しますので、特別な助けなしに 'String'に写像することはできません。 – MondKin

0

を使用することができますjOOQ 3.9.2に

関連する問題