JPA 连接运算符

Posted

技术标签:

【中文标题】JPA 连接运算符【英文标题】:JPA concat operator 【发布时间】:2012-01-20 05:25:39 【问题描述】:

是否有用于字符串连接的 ?

我知道有一个 JPA CONCAT 函数,但是它很难用于连接多个字符串。

CONCAT(CONCAT(CONCAT(cola,colb),colc),cold)

甲骨文等供应商提供||,而微软等其他供应商则提供+。是否有标准的 ,以便我可以创建类似的查询

cola || colb || colc || cold

我尝试使用带有 SQL Server 的 openjpa +,但它似乎是无效的 JPQL。我在oracle reference 中找不到任何关于此类运算符的信息。

【问题讨论】:

【参考方案1】:

CONCAT 函数在 JPA 2.0 中进行了扩展,允许传递超过 2 个参数,来自规范的第 4.6.17.2.1 节(字符串函数):

CONCAT(string_primary, string_primary , string_primary* )

在 JPA 1 中,这仅限于两个参数。

【讨论】:

嗯。奇怪的。 download.oracle.com/otn-pub/jcp/… 按照您的描述列出此功能。 Openjpa 2.1.1 应该是 JPA 2.0。 OpenJpa 2 应该支持这种语法,你能发布确切的查询和你收到的异常吗?【参考方案2】:

您可以对多个字符串使用 JPA Concat 函数。

例如:

CONCAT(cola, colb, colc, cold)

【讨论】:

检查过了。我得到了openjpa的例外。我链接的参考文献 (docs.oracle.com/cd/E16764_01/apirefs.1111/e13946/…) 也只显示了两个参数。【参考方案3】:

您也可以使用|| 作为连接运算符,请参阅on the documentation

HQL 除了支持 连接 (CONCAT) 函数。这不是 JPQL 定义的,所以 便携式应用程序应避免使用它。连接运算符 取自 SQL 连接运算符 - ||。

示例 11.19。串联操作示例

select 'Mr. ' || c.name.first || ' ' || c.name.last
from Customer c
where c.gender = Gender.MALE

【讨论】:

以上是关于JPA 连接运算符的主要内容,如果未能解决你的问题,请参考以下文章

JPA 查询语言中的 IN 和 = 运算符

Spring JPA 中的 PostgreSQL 数组运算符

如何在 JPA 中使用 CONTAINS 而不是 LIKE 进行选择

如何在 SQL (JPA) 中使用带有 IN 运算符的嵌套 SELECT 语句?

JPA CriteriaBuilder - 如何使用“IN”比较运算符

用二元运算符 mysql 查询更新列的 JPQL jpa (@Query) 是啥?