在Spring Data JPA Query中将Integer转换为String

时间:2015-11-04 23:17:48

标签: java hibernate spring-data-jpa jpql

我需要优化迭代多个对象的查询,我希望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

到目前为止,我在存储库中看到了Whatever-QL:

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

问题是,bkey并不是唯一的,只有在与akey配对时它才是唯一的,而我必须提供的怪物需要它们与下划线相结合:2345_2177

我已经尝试过a.bkey.toString''+a.bkey以及new String(a.bkey)而只是string(a.bkey)(最后会给出一个新例外,但仍然无效)但是Spring并没有# 39; t喜欢这些中的任何一个。我找不到任何问题,似乎我不能使用SQLServer的convert()函数作为这个SQL。

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

PS:使用在SQLServer中调试过的本机查询会在Hibernate中引发一些奇怪的别名异常,所以我认为“本地化”是这样的。预定是死路一条。

2 个答案:

答案 0 :(得分:1)

如果我理解正确,'Whatever-QL'被称为JPQL,并且可以使用运算符CONCAT。只有使用它,因为它接受两个或更多参数取决于您正在运行的JPA版本。

这是答案。

JPA concat operator

答案 1 :(得分:1)

您可以像这样在实体中添加一个getter:

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

优点是你可以在这里处理null和其他东西,如果你想要它,并且它更可重复使用,以防你在另一个地方需要它。如果只在存储库中执行此操作,则必须每次都复制它。

您的查询将是:

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