2017-10-19 2 views
1

So würde Ich mag einige Datensätze lazyly in POJOs holen DSLContext mit etwa so:jOOQ fetchLazy in POJO

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

Das Problem ist, dass es keine solche fetchLazyInto() und ich kann nicht so etwas wie fetchLazy().into(Something.class) weder

tun

Also, wie gehe ich über faules Holen in ein POJO? Ich würde vermeiden eher Codierung ein RecordMapper

ich sicherlich folgendes tun könnte, aber es fühlt sich falsch an:

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

Dank!

Antwort

1

Dies könnte jOOQ API getan werden nur wie folgt:

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

Jedoch nicht beachten Sie, dass Iterator nicht AutoCloseable und als solche erstreckt, können Sie eine baumelnde Ressource (die Cursor ‚s JDBC zugrunde liegenden ResultSet), die nicht beendet wird, sobald Sie die Verarbeitung der Ergebnisse stoppen. Es wird nur geschlossen, wenn Sie die Verarbeitung ohne Fehler abgeschlossen haben, oder wenn die ResultSet Garbage Collected ist.