2017-10-19 10 views
1

だから私はそうのようなDSLContextを使用してPOJOにlazylyいくつかのレコードを取得したいと思います:JOOQ fetchLazy POJOに

public Iterator<Something> getSomething(DSLContext dsl) { 
    return dsl.selectDistinct(STUFF.FIELD) 
    .from(STUFF) 
    .fetchLazyInto(Something.class) 
    .iterator(); 
} 

問題はそのようなfetchLazyInto()がないということであり、私はfetchLazy().into(Something.class)どちら

ような何かを傾けます

どうやってPOJOに怠惰なフェッチをするのですか?私はむしろ、私は確かに次の操作を行うことができますが、それは間違っていると感じRecordMapper

コーディング避けたい:

dsl.selectDistinct(STUFF.FIELD) 
    .from(STUFF) 
    .fetchLazy() 
    .stream() 
    .map(Something::new) //now Something constructor is ugly 
    .iterator(); 

ありがとう!

答えて

1

これは、以下の専用としてjOOQのAPIを使用して行うことができます

dsl.selectDistinct(STUFF.FIELD) 
    .from(STUFF) 
    .fetchLazy() 
    .stream() 
    .map(r -> r.into(Something.class)) 
    .iterator(); 

しかし、IteratorAutoCloseableを拡張していない、そのように、あなたはダングリングリソース(Cursorの基礎となるJDBC ResultSetを持っているかもしれないことに注意してください)、結果の処理を停止すると早く閉じられません。エラーなしで処理を完了したとき、またはResultSetがガベージコレクションされたときにのみ閉じます。