JOOQ fetchLazy进入POJO

时间:2017-10-19 14:58:17

标签: java jooq

所以我想使用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();

谢谢!

1 个答案:

答案 0 :(得分:1)

这可以使用jOOQ API完成,如下所示:

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

但是,请注意Iterator不会扩展AutoCloseable,因此,您可能有一个悬空资源(Cursor的基础JDBC ResultSet),早在您停止处理结果时就不会关闭。只有当您完成没有错误的处理或者ResultSet被垃圾收集时,它才会关闭。