JPA 原生查询

Posted

技术标签:

【中文标题】JPA 原生查询【英文标题】:JPA Native Query 【发布时间】:2011-08-31 08:17:36 【问题描述】:

我正在尝试执行本机查询并传递运行时参数并将结果作为列表获取。当我尝试处理 Object [] 时,提取的列之一是字符串。但它以 java.lang.Character 而不是 String 的形式出现。这是下面的查询:

SELECT CASE
         WHEN (TRUNC(abm.credit_card_expiration_date) BETWEEN trunc(SYSDATE) AND
              trunc(last_day(SYSDATE))) THEN
          'Expires'
         ELSE
          'Expired'
       END EXP_STATUS,
       TO_CHAR(abm.credit_card_expiration_date, 'MM/YY') EXP_DATE
  FROM account_billing_methods abm
 WHERE abm.account_id = 201103
   AND abm.billing_type_id = 1
   AND TRUNC(abm.credit_card_expiration_date) <= TRUNC(LAST_DAY(SYSDATE))

EXP_STATUS 列无法转换为字符串,因为它是字符类型。关于它为什么不起作用的任何想法?

问候, -阿南德

【问题讨论】:

Character 还是Character[] 甚至 String.valueOf(Obj [0]) 仅导致获取的列的第一个字符,即'E' getClass.getName() 说它是 java.lang.Character 类型 你用的是什么 JPA 提供者,听起来像个 bug 【参考方案1】:

我遇到了同样的问题,并将查询的 select 子句更改为: EXP_STATUS || '' as EXP_STATUS

那么它是一个 VARCHAR 而不是 CHAR,JPA 会将它作为字符串而不是字符返回。

如果有人知道更好/更优雅的解决方案,如果您能分享,我将不胜感激。

【讨论】:

工作就像一个魅力

以上是关于JPA 原生查询的主要内容,如果未能解决你的问题,请参考以下文章

JPA 原生查询

使用 JPA 原生查询在 jsonb(JSON 数组)列中查询

如何使用 JPA 原生查询选择多个同名的列?

Spring Data JPA 原生查询结果实体

JPA:如何将原生查询结果集转换为 POJO 类集合

Spring data jpa,原生查询Hibernate异常