【问题标题】:JPA LOWER() function not working with create queryJPA LOWER() 函数不适用于创建查询
【发布时间】:2015-06-13 08:04:57
【问题描述】:

我有一个键入的查询,例如:-

TypedQuery<peakdto> query= entityManager.createQuery("peak",peakdto);

这里

peak= "select LOWER(d.component) from peakdto d where d.peak= 'sar'";

这里的问题是LOWER() 功能不起作用。 出现意外令牌 LOWER 等错误。

【问题讨论】:

  • LOWER(d.component) 怎么会给出一个peakdto 对象作为结果?
  • 别想了,这里的东西是 lower() 不起作用,这是唯一的问题
  • 但是如果是这样的话,你的代码就会被破坏。 TypedQuery 声称结果是 peakdto,但您使用 LOWER(d.component),这只有在结果是 String 时才有意义。
  • 如果你得到一个异常,那么你引用异常+堆栈跟踪。什么是“d.component”?没有类和异常无法评论

标签: java jpa


【解决方案1】:

我不是 100% 确定,没有时间完整地阅读文档。 但是像“LOWER”这样的字符串函数只能在查询的 WHERE 部分中使用。 在 Select 部分没有意义,因为在 Result set 对象中很容易转换为小写。

例如,当您的 JPA 查询返回 Pojo MyEntity 时,您可以这样实现:

public class MyEntity {
  private String value;

  public String getValue(){}
  public void setValue(String value) {}
  public String getValueLowerCase() {
    return value.toLowerCase();
  }
}

【讨论】:

  • FWIW JPA 规范允许在 SELECT 子句中使用 LOWER(但正如你所说,它没有什么合理用途)。
  • 好的,然后忘记我的答案;)可能 JPA impl. used 没有按预期支持它。
猜你喜欢
  • 2018-07-28
  • 2012-03-09
  • 2021-01-19
  • 2015-02-24
  • 1970-01-01
  • 2020-04-05
  • 2017-11-25
  • 2017-10-01
  • 1970-01-01
相关资源
最近更新 更多