代码之家  ›  专栏  ›  技术社区  ›  Jose Martinez

JOOQ-将fetchOne().into()转换为fetchValue(查询)

  •  1
  • Jose Martinez  · 技术社区  · 7 年前

    In this answer ,作者提到为了避免NPE fetchValue(query) 可以使用方法。问题是操作系统的代码到底如何转换成 query ? 我有类似的代码,粘贴在下面,并希望把它也变成一个查询。

            return jooqDSLContext.select()
                    .from(CL_LOGIN)
                    .join(CL_USERS)
                    .on(CL_LOGIN.CL_USER_ID.eq(CL_USERS.CL_USER_ID))
                    .where(CL_USERS.EMAIL1.eq(email))
                    .fetchOne().into(CL_LOGIN);
    

    JOOQ非常强大,有很多功能,但是不幸的是,我试图用join创建一个独立的查询对象的所有东西都无法编译。

    编辑:提供的答案确实帮助我避开了拥有查询对象的需要。但是对于那些想知道如何获取查询对象的用户,可以使用 getQuery() 方法。。。请参见下面的示例。

            SelectQuery<Record1<String>> query = jooqDSLContext.select(USER_LOGIN.ACCOUNT_STATUS)
                .from(USER_LOGIN)
                .where(USER_LOGIN.USER_ID.eq(userId))
                .getQuery();
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   Lukas Eder    7 年前

    观察方法的签名 DSLContext.fetchValue(ResultQuery<R>) ,其中 R extends Record1<T> . 这意味着查询的预期行类型是 Record1<T> 任何武断的 <T> 键入。换句话说,您必须在 SELECT 条款。

    您似乎想投影类型的整个记录 CL_LOGIN ,所以 fetchValue() 不适用于您的用例。

    但是注意,还有 ResultQuery.fetchOneInto(Table) ,这是包装空检查和 into() 打电话来。所以,写下:

    return jooqDSLContext.select()
            .from(CL_LOGIN)
            .join(CL_USERS)
            .on(CL_LOGIN.CL_USER_ID.eq(CL_USERS.CL_USER_ID))
            .where(CL_USERS.EMAIL1.eq(email))
            .fetchOneInto(CL_LOGIN);