org.jooq.Query.getBindValues() 返回的 List<Object> 是不是包含类型安全的对象 - 对于每个查询参数?
Posted
技术标签:
【中文标题】org.jooq.Query.getBindValues() 返回的 List<Object> 是不是包含类型安全的对象 - 对于每个查询参数?【英文标题】:Does the List<Object> returned by org.jooq.Query.getBindValues() contain type-safe objects - for each query parameter?org.jooq.Query.getBindValues() 返回的 List<Object> 是否包含类型安全的对象 - 对于每个查询参数? 【发布时间】:2020-06-08 08:41:07 【问题描述】: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】:该方法是博文作者编写的用于将 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);
【讨论】:
“这东西不是,也没有必要”——这是什么意思?我们现在不需要担心类型安全吗?通过 JOOQ DSLContext 构建 SQL 时是否小心? 我真的不知道你在这里问什么 谢谢,您已经在twitter 中回答了。并接受您的回答:"The type of the bind value will be printed, e.g. Integer, String, Date, etc."
以上是关于org.jooq.Query.getBindValues() 返回的 List<Object> 是不是包含类型安全的对象 - 对于每个查询参数?的主要内容,如果未能解决你的问题,请参考以下文章