`
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()
方法本身不是类型安全的,因为它接受'Object'。问题:
jooqQuery.getBindValues()
是否返回[每个参数类型安全的List<Object>
?
// 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);