Содержит ли List <Object>, возвращаемый org.jooq.Query.getBindValues ​​(), безопасные для типов объекты - для каждого параметра запроса? - PullRequest
0 голосов
/ 24 февраля 2020

новичок в 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>, которые " типобезопасны для каждого параметра "?

1 Ответ

1 голос
/ 24 февраля 2020

Этот метод является клейким кодом, который написал автор блога, чтобы преобразовать 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);
...