如何将文本 JPQL JPA 查询转换为标准查询?

How to transform a text JPQL JPA query into a criteria query?

是否可以将像 select x from Clazz x 这样的 JPQL 字符串转换为 CriteriaQuery 对象,我可以在其中检查查询的根是否为 Clazz(使用 CriteriaQuery.getRoots ) 或者以不同的方式做同样的事情(不转换为 CriteriaQuery)?

JPA 文档非常简单(例如 CriteriaBuilder 的 class 评论说 "Return an instance of CriteriaBuilder for the creation of CriteriaQuery objects." - 10 或 20 个句子和更多引用不会有什么坏处)。因此它没有提到任何关于逆转 CriteriaQuery -> TypedQuery 过程的事情。

jpa - transforming jpql join query to criteria api and How to convert a JPQL with subquery to Criteria API equivalent?涵盖具体案例。我正在寻找通用的程序化解决方案。

指定与 CriteriaBuilder.createQuery(Class) 的参数不匹配的类型会导致 IllegalArgumentException,但这更像是一种解决方法,并且不允许使用一组非常有用的方法进行调查。

不,不可能,或者至少没有标准化的方式。

另请参阅 this issue 有人在 JPA 的未来版本中请求它。