JOOQ - 将fetchOne()。转换为()到fetchValue(查询)

问题描述 投票:1回答:1

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个回答
2
投票

观察方法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);
© www.soinside.com 2019 - 2024. All rights reserved.