如何将文本 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 的未来版本中请求它。
是否可以将像 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 的未来版本中请求它。