【问题标题】:jpa openjpa - order by with castjpa openjpa - 使用演员表排序
【发布时间】:2015-03-06 13:05:23
【问题描述】:

我将 jpa 与 openjpa 一起使用,并且我有一个带有 varchar 的表,在对象中表示为 int。

列:“TRIES_ERR”(varchar)

实体:

public class Book implements Serializable{

    int triesErrAsInt;
    String eMail

    @Column(name="TRIES_ERR")
    public int getTriesErrAsInt() {
        return triesErrAsInt;
    }
    public void setTriesErrAsInt(int triesErrAsInt) {
        this.triesErrAsInt = triesErrAsInt;
    }

    @Column(name="EMAIL")
    public String getEMail() {
      return eMail;
    }
    public void setEMail(String string) {
      eMail = string;
    }

}

我尝试使用TRIES_ERR 的顺序编写查询,但使用int 而不是varchar

我必须使用 jpql(而不是原生查询)

这是我尝试但没有成功的查询:

SELECT x 
FROM Book x 
ORDER BY x.triesErrAsInt ASC

返回的行按 varchar 而不是整数排序

我得到的结果是:12,13,14,2,3 而不是 2,3,12,13,14

【问题讨论】:

  • 为什么不直接测试一下?
  • 是的,这是您的查询尝试并发布问题。 (如果有)
  • 抱歉误导。我解决了这个问题,当然我已经尝试过了
  • 没有例外,我得到的结果是 12,13,14,2,3 而不是 2,3,12,13,14

标签: java sql jpa jpql openjpa


【解决方案1】:

使用这个:

SELECT x from Book x order by cast(x.triesErrAsInt as int) asc

【讨论】:

  • 不工作.. 出现异常:“遇到“by”但预期:[“AVG”、“COUNT”、“MAX”、“MIN”、“SUM”、]。”
  • 我的意思是你把新的order by 放在已经存在的select x from book x 之后。更新了答案以反映这一点。
  • 这是我的例外:在字符 31 处遇到“cast (”,但预期为:[".", "AVG", "COUNT", "MAX", "MIN", "SUM", ]。(在第一次尝试时,我错误地写了双“by”)
  • 您的 JPA 实现可能不支持它。你在用什么(hibernate、eclipselink、什么版本?)
  • 我刚遇到同样的问题,OpenJPA 好像没有 CAST,但是 CONCAT(x.column, '') 实现了同样的结果
猜你喜欢
  • 1970-01-01
  • 2018-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多