2017-04-13 19 views
1

私はjOOQで.fetchMap(key、value)を実行しようとしていますが、私はカスタムコンバータを通してキーを処理したいと思います。jOOQ .fetchMap()with Converters

ドキュメントはコンバータの使い方や、.fetchMap()の使い方が非常にはっきりしていますが、両方を組み合わせる方法はわかりません。

私のjOOQバージョン(3.9)からこの機能が欠落している可能性がありますか?

答えて

2

Converter(およびBinding)の実装は、コードジェネレータによってField参照にバインドされている、またはあなたはこのようにそれを手動で行うことができます。

// Using this static import 
import static org.jooq.impl.DSL.*; 

// Assuming a VARCHAR column in the database: 
DataType<MyType> type = SQLDataType.VARCHAR.asConvertedDataType(
    new MyConverter<String, MyType>()); 
Field<MyType> field = field(name("MY_TABLE", "MY_FIELD"), type); 

、あなたはSELECT文でこのfieldをフェッチするたびに、例えば基礎となるJDBC ResultSetから結果をフェッチしている間に

Result<Record1<MyType>> result = 
DSL.using(configuration) 
    .select(field) 
    .from(...) 
    .fetch(); 

jOOQは自動的にコンバータを適用します。あなたの結果に元のString値が決して表示されません。

上記のResultQuery.fetchMap(Field, Field)メソッドは、fetch()と短く、Result.intoMap(Field, Field)です。換言すれば、コンバータはfetchMap()またはintoMap()と呼ばれる時間までに自動的に適用されているため、具体的な処理は必要ありません。ただ、fetchMap()の引数として、あなたのフィールドを使用します。

Map<MyType, OtherType> result = 
DSL.using(configuration) 
    .select(field, otherField) 
    .from(...) 
    .fetchMap(field, otherField); 
+0

あなたはどのような方法でいくつかの光を当てることができます/関数は、 ''フィールド(名(「MY_TABLE」、「MY_FIELD」)、タイプ) ''で使用されていますか? field()とname()は何ですか? – awm

+0

@awm:確かに、私は答えに暗黙の静的インポートを追加しました –