所以我想使用 DSLContext
懒惰地将一些记录获取到 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();
谢谢!
最佳答案
这只能使用 jOOQ API 来完成,如下所示:
dsl.selectDistinct(STUFF.FIELD)
.from(STUFF)
.fetchLazy()
.stream()
.map(r -> r.into(Something.class))
.iterator();
但是,请注意,Iterator
不会扩展 AutoCloseable
,因此,您可能有一个悬空资源(Cursor
的底层资源) JDBC ResultSet
),它不会在您停止处理结果时就关闭。仅当您完成处理而没有错误,或者 ResultSet
被垃圾回收时,它才会关闭。
关于java - JOOQ fetchLazy 进入 POJO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46832904/