【问题标题】:Convert Integer to String in Spring Data JPA Query在 Spring Data JPA 查询中将整数转换为字符串
【发布时间】:2016-02-05 15:51:27
【问题描述】:

我需要优化一个遍历多个对象的查询,我希望 Spring Data 让数据库来处理它。我想最终得到一个看起来像的HashMap<String,String>

2134_9877, 9877
2134_2344, 2344
3298_9437, 9437

SQL 将是 select convert(varchar,b.id)+'_'+convert(varchar,a.id)',a.id from t1 a join t2 b on a.jc = b.jc

到目前为止,我的存储库中的 What-QL 如下所示:

@Query("SELECT new map (a.bkey, a.akey) FROM mergeTable a WHERE a.discr= ?1")

问题是,bkey 不是唯一的,它仅在与 akey 配对时才是唯一的,而我必须将其喂给它的怪物希望它们与下划线结合:2345_2177

我试过a.bkey.toString''+a.bkeynew String(a.bkey)string(a.bkey) (最后一个新的例外但仍然不起作用)但Spring 不喜欢这些。我找不到任何问题,而且似乎我不能使用 SQLServer 的 convert() 函数,因为这不是 SQL。

如何在此@Query 中将整数作为字符串与下划线连接?

PS:使用已在 SQLServer 中调试的本机查询会在 Hibernate 中引发一些奇怪的别名异常,因此我认为“进入本机”已被预先确定为死胡同。

【问题讨论】:

    标签: java hibernate spring-data-jpa jpql


    【解决方案1】:

    如果我没听错的话,'Whatever-QL' 称为 JPQL,可以使用运算符 CONCAT。仅使用它,因为它接受两个或多个参数,这取决于您运行的 JPA 版本。

    这就是答案。

    JPA concat operator

    【讨论】:

    • 不幸的是,concat 直到 SQLServer 2012 才可用。但是,在您发送的链接中,我看到虽然 2 + 'string' 不起作用,但 ''+2+'string' 确实有效。由于您指向另一个问题的链接产生了此提示,并且 int/string 转换是我的具体问题,因此我将选择您的答案作为解决方案。谢谢。 很遗憾现在我遇到了另一个错误,所以我会问一个新问题。
    【解决方案2】:

    你可以像这样向你的实体添加一个吸气剂:

    public String getCombinedKey(){
      return a.akey + "_" + a.bkey;
    }
    

    优点是你可以在这里处理空值和其他事情,如果你想的话,它更可重用,以防你在另一个地方需要它。如果您只在存储库中执行此操作,则每次都必须复制它。

    您的查询将是:

    @Query("SELECT new map (a.combinedKey, a.akey) FROM mergeTable a WHERE a.discr= ?1")
    

    【讨论】:

    • 我知道这不是一个确定的事情,但我希望将串联尽可能推到后端。 SQLServer 可以比 Hibernate 更有效地做到这一点。不过,您的建议是一个不错的设计。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 2014-08-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2016-09-03
    相关资源
    最近更新 更多