混合 JPQL 和 CriteriaQuery

Posted

技术标签:

【中文标题】混合 JPQL 和 CriteriaQuery【英文标题】:Mixing JPQL and CriteriaQuery 【发布时间】:2011-02-22 19:47:03 【问题描述】:

JPQL 和CriteriaQuery 可以混用吗?

我有一个String,其中包含 JPQL 中的 where 条件和一个已经构建并从其他地方获得的 CriteriaQuery。我想知道是否可以将 where 条件 String 添加到 CriteriaQuery.where()。 where 条件可以是多个条件“and-ed”/“or-ed”在一起。

我可以在不解析 where 条件 String 的情况下执行此操作吗?

【问题讨论】:

【参考方案1】:

如前所述,JPA 中没有通用规范(据我所知)。然而,在实现中,可能存在将查询转换为表达式或限制的方法。在 TopLink(可能是 EclipseLink)中,Expression.postfixSQL 和 prefixSQL 是最接近的方法。 Hibernate 有 Restrictions.sqlRestriction。

我不知道任何其他实现。

【讨论】:

【参考方案2】:

您可以做的一件事是将 CriteriaQuery 转换为 JPQL 并将字符串的两个 WHERE 部分连接起来。

请参阅http://www.datanucleus.org/products/accessplatform/jpa/jpql_criteria.html 上的“JPQL 等效的条件查询”

【讨论】:

【参考方案3】:

如果有办法在 JPA 1.0 或 2.0 中执行此操作,我不知道,但 this 在另一个问题中的回答表明混合 JPQL 和 CriteriaQuery 将在 JPA 2.1 中可用(将来的某个时间)。

【讨论】:

以上是关于混合 JPQL 和 CriteriaQuery的主要内容,如果未能解决你的问题,请参考以下文章

JPA JPQL简介

使用 JPQL 和 BooleanExpression 进行分页

条件查询,SQL,JPQL,HQL

JPQL 构造函数表达式中的 JPQL 和子查询

JPQL 是不是有单行和/或多行注释?

如何在 JPQL 中使用 GROUP BY 和 UNION