我需要优化迭代多个对象的查询,我希望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中引发一些奇怪的别名异常,所以我认为“本地化”是这样的。预定是死路一条。
答案 0 :(得分:1)
如果我理解正确,'Whatever-QL'被称为JPQL,并且可以使用运算符CONCAT。只有使用它,因为它接受两个或更多参数取决于您正在运行的JPA版本。
这是答案。
答案 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")