java - org.jooq.Query.getBindValues() 返回的 List<Object> 是否包含每个查询参数的类型安全对象?

标签 java jpa types jooq

JOOQ 新手。 偶然发现了这个帖子: https://thoughts-on-java.org/hibernate-jooq-a-match-made-in-heaven/

`

SelectConditionStep<Record3<String, String, String>> jooqQuery = 
        ctx.select(AUTHOR.FIRSTNAME, AUTHOR.LASTNAME, BOOK.TITLE)
            .from(AUTHOR)
                .leftJoin(BOOK_AUTHOR).on(AUTHOR.ID.eq(BOOK_AUTHOR.AUTHORS_ID))
                .leftJoin(BOOK).on(BOOK_AUTHOR.BOOKS_ID.eq(BOOK.ID))
            .where(AUTHOR.FIRSTNAME.like("Thor%"));
Query q = em.createNativeQuery(jooqQuery.getSQL());
setBindParameterValues(q, jooqQuery);


private static void setBindParameterValues(javax.persistence.Query jpaQuery, org.jooq.Query jooqQuery) {
    List<Object> values = jooqQuery.getBindValues();
    for (int i = 0; i < values.size(); i++) {
        jpaQuery.setParameter(i + 1, values.get(i));
    }
}

`

方法jpaQuery.setParameter()本身不是类型安全的,因为它接受“对象”。

问题:是否 jooqQuery.getBindValues()返回List<Object>哪些是“每个参数类型安全”?

最佳答案

该方法是博客文章作者编写的粘合代码,用于将 jOOQ Query 转换为 JPA Query。此粘合代码中不存在类型安全。您正在寻找的类型安全已在帖子的其他示例中提供,其中作者使用 jOOQ API 构建了类型安全查询,如下所示:

// This stuff is type safe
var jooqQuery = 
        ctx.select(AUTHOR.FIRSTNAME, AUTHOR.LASTNAME, BOOK.TITLE)
            .from(AUTHOR)
                .leftJoin(BOOK_AUTHOR).on(AUTHOR.ID.eq(BOOK_AUTHOR.AUTHORS_ID))
                .leftJoin(BOOK).on(BOOK_AUTHOR.BOOKS_ID.eq(BOOK.ID))
            .where(AUTHOR.FIRSTNAME.like("Thor%"));

// This stuff isn't, and there is no need
Query q = em.createNativeQuery(jooqQuery.getSQL());
setBindParameterValues(q, jooqQuery);

关于java - org.jooq.Query.getBindValues() 返回的 List<Object> 是否包含每个查询参数的类型安全对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60380639/

相关文章:

spring - 如何获取 Spring 数据 jpa 中更新记录的计数?

java - Spring boot 数据不保存到数据库

数组和派生类型

typescript - 如何在 TypeScript 中合并两个枚举

java - 如何使用 Jackson 的 objectMapper 反序列化接口(interface)字段?

java - 将文本框放在单独的行中

java - 实用程序将字节数组中的位提取到新的字节[]中

java.lang.ClassCastException,通过 JNDI 查找获取 Entitymanager

types - 在 Raku 中, "Node"类型或区分值是什么?

java - JPQL 无法处理日期