【问题标题】:JOOQ - convert fetchOne().into() to fetchValue(query)JOOQ - 将 fetchOne().into() 转换为 fetchValue(query)
【发布时间】:2019-01-11 13:33:34
【问题描述】:

In this answer,作者提到为了避免NPE,可以使用fetchValue(query)方法。问题是如何将 OP 的代码转换为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 非常强大并且具有许多功能,但不幸的是,我尝试使用连接创建独立查询对象的所有内容都无法编译。

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

        SelectQuery<Record1<String>> query = jooqDSLContext.select(USER_LOGIN.ACCOUNT_STATUS)
            .from(USER_LOGIN)
            .where(USER_LOGIN.USER_ID.eq(userId))
            .getQuery();

【问题讨论】:

    标签: java orm jooq


    【解决方案1】:

    观察方法DSLContext.fetchValue(ResultQuery&lt;R&gt;)的签名,其中R extends Record1&lt;T&gt;。这意味着查询的预期行类型是Record1&lt;T&gt; 与任意&lt;T&gt; 类型。换句话说,您必须在 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);
    

    【讨论】:

    • 谢谢卢卡斯。我读了很多你在这里和其他网站上发布的答案。非常感谢您的工作。
    猜你喜欢
    • 2013-08-26
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    • 2018-01-02
    • 2015-02-24
    • 2016-04-11
    • 2014-11-17
    • 2015-07-30
    相关资源
    最近更新 更多