【问题标题】:Compare Long to String比较 Long 和 String
【发布时间】:2014-11-20 16:25:22
【问题描述】:

在 JPQL 中我想做的条件:

book.id like lower(:search)

问题:book.idLong,但 :search 参数是字符串。以上是否会按原样工作,还是我需要将book.id 显式转换为String,如果是这样,我该怎么做?

【问题讨论】:

    标签: jpa jpql jpa-2.1


    【解决方案1】:

    我会将:search 参数转换为Long 并将查询条件更改为:

    book.id = :search
    

    那么

    List<Books> books = em.createQuery("... WHERE book.id = :search")
                          .setParameter("search", Long.valueOf(strSearch))
                          .getResultList();
    

    一般来说处理数字比字符串快。

    【讨论】:

    • 那行不通,因为在我的例子中,:search 参数不仅用于与 id 进行比较,还用于与标题进行比较(用户可以搜索 id 或标题)。跨度>
    • 嗯,这种情况不是最初问题的一部分;)。如果您需要将:search 与标题字符串进行比较,那么LIKE 是正确的选择。无论如何,使用完整的查询定义(甚至是伪代码)更新问题会有所帮助,以便更好地理解其背后的想法。
    【解决方案2】:

    您可以在 JPQL 中使用 CAST 语句,例如:

    CAST(book.id AS string) LIKE lower(:search)
    

    但使用此解决方案,您将无法在 book.id 列上使用任何索引。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-16
      • 1970-01-01
      • 2017-08-30
      • 2018-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多