【问题标题】:JOOQ - convert result into PojoJOOQ - 将结果转换为 Pojo
【发布时间】:2014-11-17 20:12:06
【问题描述】:

我看到当我们使用.selectFrom(TABLE).fetchInto(POJO.class);时,JOOQ可以自动返回一个POJO

但是是否可以将复杂查询的结果转换成多个 POJO 呢?

例子:

此查询会将所有列的数组返回到表 Support 和 Box。可以将它们转换为 Support 和 Box Pojo 吗?

Result<Record> results = query.select()
                         .from(BOX)
                         .join(SUPPORT)
                         .on(SUPPORT.ID.equal(BOX.SUPPORT_ID))
                         .where(SUPPORT.ID.equal("XXXX"))
                         .orderBy(BOX.ID)
                         .fetch();

我已经测试了 .intoGroups(SUPPORT.ID, Box.class) 的方法,它工作正常。但是我没有支持对象。

【问题讨论】:

    标签: java sql jooq


    【解决方案1】:

    实例化为SelectSeekStep1

    aliases 更方便:

    Box b = BOX.as("b");
    Support s = SUPPORT.as("s");
    
    SelectSeekStep1<Integer, Integer> sql = query.select(b.ID, s.ID /* other columns */)
         .from(b)
         .join(s)
            .on(s.ID.eq(b.SUPPORT_ID))
         .where(s.ID.eq("XXXX"))
         .orderBy(b.ID)
    ;
    

    然后根据需要获取/获取:

    List<BoxRecord> boxes = sql.fetchInto(BOX); 
    SupportRecord support = sql.limit(1).fetchOneInto(SUPPORT);
    

    【讨论】:

    • 感谢您的回答。我已经测试过了,但它没有预期的结果。对于盒子,没关系,但是当我做 SupportRecord support = sql.limit(1).fetchOneInto(SUPPORT);它是进入 SupportRecord.ID 的 Box id(因为它们具有相同的字段名称?)
    • @ascott:That's a known issue。目前,您必须删除别名,即对 as("b")as("s") 的调用。
    【解决方案2】:

    对于未来的读者,如果您想使用插入方法实现相同的行为,您应该使用:

    insertInto(BOX)
        .set(BOX.COLUMN1, UInteger.valueOf(1))
        .set(BOX.COLUMN2, "test")
        .returning()
        .fetchOne()
        .into(<POJO_class>.class);
    

    【讨论】:

      猜你喜欢
      • 2019-03-31
      • 2020-03-06
      • 2021-02-24
      • 1970-01-01
      • 2016-09-15
      • 1970-01-01
      • 1970-01-01
      • 2013-09-01
      • 1970-01-01
      相关资源
      最近更新 更多